home *** CD-ROM | disk | FTP | other *** search
/ Aminet 31 / Aminet 31 (1999)(Schatztruhe)[!][Jun 1999].iso / Aminet / mus / midi / XGToolset5_src.lha / XGToolset_src / XGChorus / XGChorus.c < prev    next >
C/C++ Source or Header  |  1999-02-18  |  75KB  |  1,928 lines

  1. /*
  2.     XG-Chorus-Editor V1.3
  3.  
  4.     A  Bars  and  Pipes  tool  for  editing  the  CHXG-XG-board  from  YAMAHA.
  5.     Especially the chorus-effects with all parameters.
  6.  
  7.     Use it together with the DB50XG.ptool form us.
  8.  
  9.     © 1998 Alfred & Matthias Faust
  10.  
  11.     The Tool-code based farly on the code for  the  "pc3.ptool"  from  Richard
  12.     Hagen. That's a very good tool, many thanks to him.
  13.  
  14.     Richard has written his tool with DICE. We altered  the  code  to  compile
  15.     with  the  free  GNU-C-compiler  of  the  ADE.  Especially  the  part  was
  16.     transcripted,  that  place  the  imagedate  in   chip-RAM,   because   the
  17.     GNU-C-compiler  hasn't  as  yet  a keyword like DICE or other compiler for
  18.     this.
  19.  
  20.     This  code  is  released  into  the  Public  Domain,  and  may  be  freely
  21.     distributed in its original form.
  22.  
  23.     It is supplied ``as is'', and comes with no warranty.  This  program  code
  24.     was  released  because  it  might  be useful as a starting point for other
  25.     programmers. However, if any damage arises  from  its  use,  the  original
  26.     author and we will not be held liable.
  27.  
  28.     You are free to use and modify this code to your heart's content, provided
  29.     you  acknowledge  me  as  the  original  author in any code that you might
  30.     distribute which is based largely on this code.
  31.  
  32.     I acknowledge that the design of this tool is influenced strongly  by  the
  33.     example  code  supplied  with the Rules for Tools package. However, I have
  34.     made substantial contributions of my own.
  35.  
  36.     Matthias & Alfred Faust
  37.     j.k.dax@t-online.de
  38.  
  39.     History:
  40.         1.3 (16.11.1998)
  41.         Initial Release.
  42.  
  43.         1.0 - 1.2
  44.         overjumping, because all tools shall have the same version number
  45.  
  46.         1.4 (18.2.1999)
  47.         all slidervalues will be "remembered" if tool is placed in the
  48.         pipeline and stored with the song, reloaded and worked away.
  49.  
  50.     
  51. */
  52.  
  53. #include "bars.h"
  54. #include "myheader.h"  // from R.Hagen
  55. #include <libraries/dos.h>
  56. #include <proto/exec.h>
  57. #include <proto/intuition.h>
  58. #include <proto/graphics.h>
  59. #include <exec/memory.h>
  60. #include <exec/execbase.h>
  61. #include <exec/types.h>
  62. #include <string.h>
  63. #include <intuition/intuition.h>
  64.  
  65.  
  66. char version[]="\0$VER:XG-Chorus-Edit 1.4 (18.2.1999) © Alfred & Matthias Faust";
  67.  
  68. #define CHXG_NAME "XG-Chorus-Edit"
  69.  
  70. #define CHXG_ID          0x43485847
  71. #define CHXG_TYPE        (TOOL_NORMAL | TOOL_NOTPAD)
  72.  
  73. // Hall-Effects  300 ->
  74.  
  75. #define chorus1      0
  76. #define chorus2      1
  77. #define chorus3      2
  78. #define chorus4      3
  79. #define celeste1     4
  80. #define celeste2     5
  81. #define celeste3     6
  82. #define celeste4     7
  83. #define flanger1     8
  84. #define flanger2     9
  85. #define flanger3    10
  86.  
  87.  
  88. extern struct ExecBase * SysBase;
  89.  
  90. /* the litte Icon in the pipeline */
  91.  
  92. UWORD *CHXG=NULL;
  93.  
  94. static UWORD CHXGdata[] =
  95. {
  96.         /* Plane 0 */
  97.                 0x7FFF,0xFE00,
  98.                 0x7FFF,0xFE00,
  99.                 0x7FFF,0xFE00,
  100.                 0x7EDB,0x7E00,
  101.                 0x7C99,0x3E00,
  102.                 0x707E,0x0E00,
  103.                 0x707E,0x0E00,
  104.                 0x7C99,0x3E00,
  105.                 0x7EDB,0x7E00,
  106.                 0x7FFF,0xFE00,
  107.                 0x7FFF,0xFE00,
  108.                 0x7FFF,0xFE00,
  109.         /* Plane 1 */
  110.                 0x0000,0x0200,
  111.                 0x0000,0x0600,
  112.                 0x1FFF,0xFE00,
  113.                 0x1FFF,0xFE00,
  114.                 0x9FFF,0xFF00,
  115.                 0x93FF,0xCF00,
  116.                 0x93FF,0xCF00,
  117.                 0x9FFF,0xFF00,
  118.                 0x1FFF,0xFE00,
  119.                 0x1FFF,0xFE00,
  120.                 0x1FFF,0xFE00,
  121.                 0x3FFF,0xFE00,
  122.         /* Plane 2 */
  123.                 0x0000,0x0000,
  124.                 0x0000,0x0000,
  125.                 0x1FFF,0xF800,
  126.                 0x1FC3,0xF800,
  127.                 0x1FA5,0xF800,
  128.                 0x1F18,0xF800,
  129.                 0x1F18,0xF800,
  130.                 0x1FA5,0xF800,
  131.                 0x1FC3,0xF800,
  132.                 0x1FFF,0xF800,
  133.                 0x0000,0x0000,
  134.                 0x0000,0x0000
  135.  
  136. };
  137.  
  138. static struct Image CHXG_image = {
  139.   0, 0,
  140.   24 ,  12 ,  3 ,
  141.   NULL,
  142.   0x1f, 0x00,
  143.   NULL
  144. };
  145.  
  146.  
  147. //Definitions of the gadgets
  148.  
  149.  
  150. #define CHTYPE_GADGET                   1
  151. #define CHTYPEDOWN_GADGET               2
  152. #define CHTYPEUP_GADGET                 3
  153.  
  154. #define CHLFOFREQ_GADGET                4
  155. #define CHLFOFREQDOWN_GADGET            5
  156. #define CHLFOFREQUP_GADGET              6
  157.  
  158. #define CHLFOPMDEPTH_GADGET             7
  159. #define CHLFOPMDEPTHDOWN_GADGET         8
  160. #define CHLFOPMDEPTHUP_GADGET           9
  161.  
  162. #define CHFEEDBLEVEL_GADGET             10
  163. #define CHFEEDBLEVELDOWN_GADGET         11
  164. #define CHFEEDBLEVELUP_GADGET           12
  165.  
  166. #define CHDELAYOFFSET_GADGET       13
  167. #define CHDELAYOFFSETDOWN_GADGET   14
  168. #define CHDELAYOFFSETUP_GADGET     15
  169.  
  170. #define CHEQLOWFREQ_GADGET              16
  171. #define CHEQLOWFREQDOWN_GADGET          17
  172. #define CHEQLOWFREQUP_GADGET            18
  173.  
  174. #define CHEQLOWGAIN_GADGET              19
  175. #define CHEQLOWGAINDOWN_GADGET          20
  176. #define CHEQLOWGAINUP_GADGET            21
  177.  
  178. #define CHEQHIGHFREQ_GADGET             22
  179. #define CHEQHIGHFREQDOWN_GADGET         23
  180. #define CHEQHIGHFREQUP_GADGET           24
  181.  
  182. #define CHEQHIGHGAIN_GADGET             25
  183. #define CHEQHIGHGAINDOWN_GADGET         26
  184. #define CHEQHIGHGAINUP_GADGET           27
  185.  
  186. #define CHDRYWET_GADGET                 31
  187. #define CHDRYWETDOWN_GADGET             32
  188. #define CHDRYWETUP_GADGET               33
  189.  
  190. #define CHRETURN_GADGET                 34
  191. #define CHRETURNDOWN_GADGET             35
  192. #define CHRETURNUP_GADGET               36
  193.  
  194. #define CHPAN_GADGET                    37
  195. #define CHPANDOWN_GADGET                38
  196. #define CHPANUP_GADGET                  39
  197.  
  198. #define CHSNDCHORREV_GADGET             40
  199. #define CHSNDCHORREVDOWN_GADGET         41
  200. #define CHSNDCHORREVUP_GADGET           42
  201.  
  202. #define CHINPUT_GADGET                  43
  203. #define CHINPUTDOWN_GADGET              44
  204. #define CHINPUTUP_GADGET                45
  205.  
  206. #define CHLFOPHASEDIFF_GADGET           46
  207. #define CHLFOPHASEDIFFDOWN_GADGET       47
  208. #define CHLFOPHASEDIFFUP_GADGET         48
  209.  
  210. #define WRITE_GADGET                    49
  211.  
  212. //all the gadgets
  213.  
  214. /* Chorus-Type-Gadget */
  215. struct PropInfo CHXGGadget1SInfo = {
  216.   AUTOKNOB+FREEHORIZ, -16384,  -1, 16384,  -1,
  217. };
  218.  
  219. struct Image CHXGImage1 = {
  220.   0, 0, 102, 6, 0, NULL, 0x0000, 0x0000, NULL
  221. };
  222.  
  223. struct IntuiText CHXGIText1 = {
  224.   2, 0, JAM1, -78, 1, NULL, "     Type", NULL
  225. };
  226.  
  227. struct Gadget CHXGGadget1 = {
  228.   NULL, 85, 31, 150, 9, GFLG_GADGHBOX|GFLG_GADGHIMAGE, RELVERIFY|GADGIMMEDIATE, PROPGADGET,
  229.   (APTR)&CHXGImage1, NULL, &CHXGIText1, NULL, (APTR)&CHXGGadget1SInfo, CHTYPE_GADGET, NULL
  230. };
  231.  
  232.  
  233. /* Chorus-LFO-Frequence-Gadget */
  234. struct PropInfo CHXGGadget2SInfo = {
  235.   AUTOKNOB+FREEHORIZ, -16384,  -1, 16384,  -1,
  236. };
  237.  
  238. struct Image CHXGImage2 = {
  239.   0, 0, 102, 6, 0, NULL, 0x0000, 0x0000, NULL
  240. };
  241.  
  242. struct IntuiText CHXGIText2 = {
  243.   2, 0, JAM1, -78, 1, NULL, " LFO Freq", NULL
  244. };
  245.  
  246. struct Gadget CHXGGadget2 = {
  247.   &CHXGGadget1, 85, 42, 150, 9, GFLG_GADGHBOX|GFLG_GADGHIMAGE, RELVERIFY|GADGIMMEDIATE, PROPGADGET,
  248.   (APTR)&CHXGImage2, NULL, &CHXGIText2, NULL, (APTR)&CHXGGadget2SInfo, CHLFOFREQ_GADGET, NULL
  249. };
  250.  
  251.  
  252. /* Chorus-LFO-phasemodulation-Depth-Gadget */
  253. struct PropInfo CHXGGadget3SInfo = {
  254.   AUTOKNOB+FREEHORIZ, -16384,  -1, 16384,  -1,
  255. };
  256.  
  257. struct Image CHXGImage3 = {
  258.   0, 0, 102, 6, 0, NULL, 0x0000, 0x0000, NULL
  259. };
  260.  
  261. struct IntuiText CHXGIText3 = {
  262.   2, 0, JAM1, -78, 1, NULL, "LFOpmDpth", NULL
  263. };
  264.  
  265. struct Gadget CHXGGadget3 = {
  266.   &CHXGGadget2, 85, 53, 150, 9, GFLG_GADGHBOX|GFLG_GADGHIMAGE, RELVERIFY|GADGIMMEDIATE, PROPGADGET,
  267.   (APTR)&CHXGImage3, NULL, &CHXGIText3, NULL, (APTR)&CHXGGadget3SInfo, CHLFOPMDEPTH_GADGET, NULL
  268. };
  269.  
  270. //Chorus-Feedback-Level-Gadget
  271. struct PropInfo CHXGGadget4SInfo = {
  272.   AUTOKNOB+FREEHORIZ, -16384,  -1, 16384,  -1,
  273. };
  274.  
  275. struct Image CHXGImage4 = {
  276.   0, 0, 102, 6, 0, NULL, 0x0000, 0x0000, NULL
  277. };
  278.  
  279. struct IntuiText CHXGIText4 = {
  280.   2, 0, JAM1, -78, 1, NULL, "FeedbkLvl", NULL
  281. };
  282.  
  283. struct Gadget CHXGGadget4 = {
  284.   &CHXGGadget3, 85, 64, 150, 9, GFLG_GADGHBOX|GFLG_GADGHIMAGE, RELVERIFY|GADGIMMEDIATE, PROPGADGET,
  285.   (APTR)&CHXGImage4, NULL, &CHXGIText4, NULL, (APTR)&CHXGGadget4SInfo, CHFEEDBLEVEL_GADGET, NULL
  286. }; //  CHFEEDBLEVEL_GADGET
  287.  
  288. //Chorus-Delay-Offset-Gadget
  289. struct PropInfo CHXGGadget5SInfo = {
  290.   AUTOKNOB+FREEHORIZ, -16384,  -1, 16384,  -1,
  291. };
  292.  
  293. struct Image CHXGImage5 = {
  294.   0, 0, 102, 6, 0, NULL, 0x0000, 0x0000, NULL
  295. };
  296.  
  297. struct IntuiText CHXGIText5 = {
  298.   2, 0, JAM1, -78, 1, NULL, "DelayOffs", NULL
  299. };
  300.  
  301. struct Gadget CHXGGadget5 = {
  302.   &CHXGGadget4, 85, 75, 150, 9, GFLG_GADGHBOX|GFLG_GADGHIMAGE, RELVERIFY|GADGIMMEDIATE, PROPGADGET,
  303.   (APTR)&CHXGImage5, NULL, &CHXGIText5, NULL, (APTR)&CHXGGadget5SInfo, CHDELAYOFFSET_GADGET, NULL
  304. }; //CHDELAYOFFSET_GADGET
  305.  
  306.  
  307. //Chorus-Equalizer-Low-Frequence-Gadget
  308. struct PropInfo CHXGGadget6SInfo = {
  309.   AUTOKNOB+FREEHORIZ, -16384,  -1, 16384,  -1,
  310. };
  311.  
  312. struct Image CHXGImage6 = {
  313.   0, 0, 102, 6, 0, NULL, 0x0000, 0x0000, NULL
  314. };
  315.  
  316. struct IntuiText CHXGIText6 = {
  317.   2, 0, JAM1, -78, 1, NULL, "EqLowFreq", NULL
  318. };
  319.  
  320. struct Gadget CHXGGadget6 = {
  321.   &CHXGGadget5, 85, 86, 150, 9, GFLG_GADGHBOX|GFLG_GADGHIMAGE, RELVERIFY|GADGIMMEDIATE, PROPGADGET,
  322.   (APTR)&CHXGImage6, NULL, &CHXGIText6, NULL, (APTR)&CHXGGadget6SInfo, CHEQLOWFREQ_GADGET, NULL
  323. }; //CHEQLOWFREQ_GADGET
  324.  
  325. //Chorus-Equalizer-Low-Gain-Gadget
  326. struct PropInfo CHXGGadget7SInfo = {
  327.   AUTOKNOB+FREEHORIZ, -16384,  -1, 16384,  -1,
  328. };
  329.  
  330. struct Image CHXGImage7 = {
  331.   0, 0, 102, 6, 0, NULL, 0x0000, 0x0000, NULL
  332. };
  333.  
  334. struct IntuiText CHXGIText7 = {
  335.   2, 0, JAM1, -78, 1, NULL, "EqLowGain", NULL
  336. };
  337.  
  338. struct Gadget CHXGGadget7 = {
  339.   &CHXGGadget6, 85, 97, 150, 9, GFLG_GADGHBOX|GFLG_GADGHIMAGE, RELVERIFY|GADGIMMEDIATE, PROPGADGET,
  340.   (APTR)&CHXGImage7, NULL, &CHXGIText7, NULL, (APTR)&CHXGGadget7SInfo, CHEQLOWGAIN_GADGET, NULL
  341. }; //CHEQLOWGAIN_GADGET
  342.  
  343. //Chorus-Equalizer-High-Frequence-Gadget
  344. struct PropInfo CHXGGadget8SInfo = {
  345.   AUTOKNOB+FREEHORIZ, -16384,  -1, 16384,  -1,
  346. };
  347.  
  348. struct Image CHXGImage8 = {
  349.   0, 0, 102, 6, 0, NULL, 0x0000, 0x0000, NULL
  350. };
  351.  
  352. struct IntuiText CHXGIText8 = {
  353.   2, 0, JAM1, -78, 1, NULL, " EqHiFreq", NULL
  354. };
  355.  
  356. struct Gadget CHXGGadget8 = {
  357.   &CHXGGadget7, 85, 108, 150, 9, GFLG_GADGHBOX|GFLG_GADGHIMAGE, RELVERIFY|GADGIMMEDIATE, PROPGADGET,
  358.   (APTR)&CHXGImage8, NULL, &CHXGIText8, NULL, (APTR)&CHXGGadget8SInfo, CHEQHIGHFREQ_GADGET, NULL
  359. }; //CHEQHIGHFREQ_GADGET
  360.  
  361.  
  362. //Chorus-Equalizer-High-Gain-Gadget
  363. struct PropInfo CHXGGadget9SInfo = {
  364.   AUTOKNOB+FREEHORIZ, -16384,  -1, 16384,  -1,
  365. };
  366.  
  367. struct Image CHXGImage9 = {
  368.   0, 0, 102, 6, 0, NULL, 0x0000, 0x0000, NULL
  369. };
  370.  
  371. struct IntuiText CHXGIText9 = {
  372.   2, 0, JAM1, -78, 1, NULL, " EqHiGain", NULL
  373. };
  374.  
  375. struct Gadget CHXGGadget9 = {
  376.   &CHXGGadget8, 85, 119, 150, 9, GFLG_GADGHBOX|GFLG_GADGHIMAGE, RELVERIFY|GADGIMMEDIATE, PROPGADGET,
  377.   (APTR)&CHXGImage9, NULL, &CHXGIText9, NULL, (APTR)&CHXGGadget9SInfo, CHEQHIGHGAIN_GADGET, NULL
  378. }; //CHEQHIGHGAIN_GADGET
  379.  
  380.  
  381. //Chorus-Dry/Wet-Gadget
  382. struct PropInfo CHXGGadget10SInfo = {
  383.   AUTOKNOB+FREEHORIZ, -16384,  -1, 16384,  -1,
  384. };
  385.  
  386. struct Image CHXGImage10 = {
  387.   0, 0, 102, 6, 0, NULL, 0x0000, 0x0000, NULL
  388. };
  389.  
  390. struct Gadget CHXGGadget10 = {
  391.   &CHXGGadget9, 85, 130, 150, 9, GFLG_GADGHBOX|GFLG_GADGHIMAGE, RELVERIFY|GADGIMMEDIATE, PROPGADGET,
  392.   (APTR)&CHXGImage10, NULL, NULL, NULL, (APTR)&CHXGGadget10SInfo, CHDRYWET_GADGET, NULL
  393. }; //CHDRYWET_GADGET
  394.  
  395. //Chorus-Return-Gadget
  396. struct PropInfo CHXGGadget11SInfo = {
  397.   AUTOKNOB+FREEHORIZ, -16384,  -1, 16384,  -1,
  398. };
  399.  
  400. struct Image CHXGImage11 = {
  401.   0, 0, 102, 6, 0, NULL, 0x0000, 0x0000, NULL
  402. };
  403.  
  404. struct Gadget CHXGGadget11 = {
  405.   &CHXGGadget10, 85, 141, 150, 9, GFLG_GADGHBOX|GFLG_GADGHIMAGE, RELVERIFY|GADGIMMEDIATE, PROPGADGET,
  406.   (APTR)&CHXGImage11, NULL, NULL, NULL, (APTR)&CHXGGadget11SInfo, CHRETURN_GADGET, NULL
  407. }; //CHRETURN_GADGET
  408.  
  409. //Chorus-Pan-Gadget
  410. struct PropInfo CHXGGadget12SInfo = {
  411.   AUTOKNOB+FREEHORIZ, -16384,  -1, 16384,  -1,
  412. };
  413.  
  414. struct Image CHXGImage12 = {
  415.   0, 0, 102, 6, 0, NULL, 0x0000, 0x0000, NULL
  416. };
  417.  
  418. struct Gadget CHXGGadget12 = {
  419.   &CHXGGadget11, 85, 152, 150, 9, GFLG_GADGHBOX|GFLG_GADGHIMAGE, RELVERIFY|GADGIMMEDIATE, PROPGADGET,
  420.   (APTR)&CHXGImage12, NULL, NULL, NULL, (APTR)&CHXGGadget12SInfo, CHPAN_GADGET, NULL
  421. }; //CHPAN_GADGET
  422.  
  423.  
  424. //Chorus-Send-Chorus-to-Reverb-Gadget
  425. struct PropInfo CHXGGadget13SInfo = {
  426.   AUTOKNOB+FREEHORIZ, -16384,  -1, 16384,  -1,
  427. };
  428.  
  429. struct Image CHXGImage13 = {
  430.   0, 0, 102, 6, 0, NULL, 0x0000, 0x0000, NULL
  431. };
  432.  
  433. struct Gadget CHXGGadget13 = {
  434.   &CHXGGadget12, 85, 163, 150, 9, GFLG_GADGHBOX|GFLG_GADGHIMAGE, RELVERIFY|GADGIMMEDIATE, PROPGADGET,
  435.   (APTR)&CHXGImage13, NULL, NULL, NULL, (APTR)&CHXGGadget13SInfo, CHSNDCHORREV_GADGET, NULL
  436. }; //CHSNDCHORREV_GADGET
  437.  
  438. //Chorus-Input-Gadget
  439. struct PropInfo CHXGGadget14SInfo = {
  440.   AUTOKNOB+FREEHORIZ, -16384,  -1, 16384,  -1,
  441. };
  442.  
  443. struct Image CHXGImage14 = {
  444.   0, 0, 102, 6, 0, NULL, 0x0000, 0x0000, NULL
  445. };
  446.  
  447. struct Gadget CHXGGadget14 = {
  448.   &CHXGGadget13, 85, 174, 150, 9, GFLG_GADGHBOX|GFLG_GADGHIMAGE, RELVERIFY|GADGIMMEDIATE, PROPGADGET,
  449.   (APTR)&CHXGImage14, NULL, NULL, NULL, (APTR)&CHXGGadget14SInfo, CHINPUT_GADGET, NULL
  450. }; //CHINPUT_GADGET
  451.  
  452. //Chorus-LFO-Phase-Difference-Gadget
  453. struct PropInfo CHXGGadget15SInfo = {
  454.   AUTOKNOB+FREEHORIZ, -16384,  -1, 16384,  -1,
  455. };
  456.  
  457. struct Image CHXGImage15 = {
  458.   0, 0, 102, 6, 0, NULL, 0x0000, 0x0000, NULL
  459. };
  460.  
  461. struct Gadget CHXGGadget15 = {
  462.   &CHXGGadget14, 85, 185, 150, 9, GFLG_GADGHBOX|GFLG_GADGHIMAGE, RELVERIFY|GADGIMMEDIATE, PROPGADGET,
  463.   (APTR)&CHXGImage15, NULL, NULL, NULL, (APTR)&CHXGGadget15SInfo, CHLFOPHASEDIFF_GADGET, NULL
  464. }; //CHLFOPHASEDIFF_GADGET
  465.  
  466. /* Write gadget. */
  467. struct IntuiText CHXGIText16 = {
  468.   4,0,JAM1,4,2,NULL,"Write",NULL
  469.   };
  470.  
  471. struct Gadget CHXGGadget16 = {
  472.   &CHXGGadget15,110,208,50,11,GFLG_GADGHBOX|GFLG_GADGHIMAGE,RELVERIFY|GADGIMMEDIATE,BOOLGADGET,
  473.   (APTR)NULL,NULL,&CHXGIText16,NULL,NULL,WRITE_GADGET,NULL
  474.   };
  475.  
  476.  
  477.  
  478. //the mainwindowstructure
  479.  
  480. struct NewWindow CHXGNewWindowStructure1 = {
  481.   214, 167,
  482.   275, 233,
  483.   0, 6,
  484.   GADGETDOWN|GADGETUP|CLOSEWINDOW,
  485.   WINDOWDRAG|WINDOWDEPTH|WINDOWCLOSE|ACTIVATE|NOCAREREFRESH,
  486.   &CHXGGadget16,
  487.   NULL,
  488.   "XGChorus-Editor",
  489.   NULL,
  490.   NULL,
  491.   5, 5,
  492.   -1, -1,
  493.   CUSTOMSCREEN
  494. };
  495.  
  496.  
  497. struct CHXGTool {
  498.   struct Tool tool;
  499.  
  500.   UBYTE chortype;
  501.   UBYTE chorlfofrequence;
  502.   UBYTE chorlfopmdepth;
  503.   UBYTE chorfeedbacklevel;
  504.   UBYTE chordelayoffset;
  505.   UBYTE choreqlowfreq;
  506.   UBYTE choreqlowgain;
  507.   UBYTE choreqhighfreq;
  508.   UBYTE choreqhighgain;
  509.   UBYTE chordrywet;
  510.   UBYTE chorreturn;
  511.   UBYTE chorpan;
  512.   UBYTE chorsndchorrev;
  513.   UBYTE chorinput;
  514.   UBYTE chorlfophasediff;
  515.  
  516.   char storage1[32];
  517.   char storage2[32];
  518.   char storage3[32];
  519.   char storage4[32];
  520.   char storage5[32];
  521.   char storage6[32];
  522.   char storage7[32];
  523.   char storage8[32];
  524.   char storage9[32];
  525.   char storage10[32];
  526.   char storage11[32];
  527.   char storage12[32];
  528.   char storage13[32];
  529.   char storage14[32];
  530.   char storage15[32];
  531.  
  532.   char *chortypesysex;
  533.   char *chorlfofrequencesysex;
  534.   char *chorlfopmdepthsysex;
  535.   char *chorfeedbacklevelsysex;
  536.   char *chordelayoffsetsysex;
  537.   char *choreqlowfreqsysex;
  538.   char *choreqlowgainsysex;
  539.   char *choreqhighfreqsysex;
  540.   char *choreqhighgainsysex;
  541.   char *chordrywetsysex;
  542.   char *chorreturnsysex;
  543.   char *chorpansysex;
  544.   char *chorsndchorrevsysex;
  545.   char *chorinputsysex;
  546.   char *chorlfophasediffsysex;
  547.  
  548. };
  549.  
  550. static struct ToolMaster master;
  551.  
  552. extern struct Functions *functions;
  553.  
  554. //initial values
  555. static void CHXG_tool_init(struct CHXGTool *tool)
  556. {
  557.  
  558.  
  559.   tool->chorlfofrequence=   0x06;
  560.   tool->chorlfopmdepth=     0x36;
  561.   tool->chorfeedbacklevel=  0x4d;
  562.   tool->chordelayoffset=    0x6a;
  563.   tool->choreqlowfreq=      0x14;
  564.   tool->choreqlowgain=      0x0c;
  565.   tool->choreqhighfreq=     0x12;
  566.   tool->choreqhighgain=     0x0c;
  567.   tool->chordrywet=         0x40;
  568.   tool->chorreturn=         0x40;
  569.   tool->chorpan=            0x40;
  570.   tool->chorsndchorrev=     0x00;
  571.   tool->chorinput=          0x00;
  572.   tool->chorlfophasediff=   0x00;
  573.  
  574.  
  575.   tool->chortypesysex           = NULL;
  576.   tool->chorlfofrequencesysex   = NULL;
  577.   tool->chorlfopmdepthsysex     = NULL;
  578.   tool->chorfeedbacklevelsysex  = NULL;
  579.   tool->chordelayoffsetsysex    = NULL;
  580.   tool->choreqlowfreqsysex      = NULL;
  581.   tool->choreqlowgainsysex      = NULL;
  582.   tool->choreqhighfreqsysex     = NULL;
  583.   tool->choreqhighgainsysex     = NULL;
  584.   tool->chordrywetsysex         = NULL;
  585.   tool->chorreturnsysex         = NULL;
  586.   tool->chorpansysex            = NULL;
  587.   tool->chorsndchorrevsysex     = NULL;
  588.   tool->chorinputsysex          = NULL;
  589.   tool->chorlfophasediffsysex   = NULL;
  590.  
  591.   tool->tool.touched = TOUCH_INIT;
  592. }
  593.  
  594. static BOOL lock_clip(struct Clip *clip)
  595. {
  596.   Forbid();
  597.   if (clip->locked == 0)
  598.     {
  599.       clip->locked = 1;
  600.       Permit();
  601.       return TRUE;
  602.     }
  603.   else
  604.     {
  605.       Permit();
  606.       return FALSE;
  607.     }
  608. }
  609.  
  610. static void unlock_clip(struct Clip *clip)
  611. {
  612.   clip->locked = 0;
  613. }
  614.  
  615. static struct Event * __saveds processeventcode(struct Event *event)
  616. {
  617.   event->tool = event->tool->next;
  618.   return(event);
  619. }
  620.  
  621. //writes sysex into track
  622.  
  623. static void __saveds insertsysex(char *buff, short size, struct CHXGTool *tool,  const LONG time)
  624. {
  625.     struct StringEvent *event;
  626.     struct String *string;
  627.  
  628.     event = (struct StringEvent *) (*functions->allocevent)();
  629.      if (event)
  630.       {
  631.         string = (struct String *) (*functions->myalloc)(size + 3, MEMF_CLEAR);
  632.         if (string)
  633.         {
  634.             event->next = NULL;
  635.             event->string = string;
  636.             memcpy(string->string,  buff,  size);
  637.             string->length = size + 2;
  638.             event->type = EVENT_SYSX;
  639.             event->status = MIDI_SYSX;
  640.             event->time = time;
  641.             event->tool = tool->tool.next;
  642.             if (lock_clip(&(tool->tool.track->clip)))
  643.               {
  644.                 event->next = (struct StringEvent *)tool->tool.track->clip.events.first;
  645.                 tool->tool.track->clip.events.first = (struct Event *)(*functions->sorteventlist)(event);
  646.                 unlock_clip(&(tool->tool.track->clip));
  647.               }
  648.             else
  649.               {
  650.                 (*functions->freelist)(event);
  651.               }
  652.  
  653.         }
  654.       }
  655.  
  656. }
  657.  
  658. // the routine for sending SysEx-data thru the pipeline
  659.  
  660. static void __saveds sendsysex(char *buff,  short size,  struct CHXGTool *tool,  const LONG time)
  661. {
  662.     struct StringEvent *event;
  663.     struct String *string;
  664.  
  665.     event = (struct StringEvent *) (*functions->allocevent)();
  666.      if (event)
  667.       {
  668.         string = (struct String *) (*functions->myalloc)(size + 3, MEMF_CLEAR);
  669.         if (string)
  670.         {
  671.             event->string = string;
  672.             memcpy(string->string,  buff,  size);
  673.             string->length = size + 2;
  674.             event->type = EVENT_SYSX;
  675.             event->status = MIDI_SYSX;
  676.             event->time = time;
  677.             event->tool = tool->tool.next;
  678.             WaitTOF();
  679.             (*functions->qevent)(event);
  680.             (*functions->myfree)(string);
  681.         }
  682.       }
  683.  
  684. }
  685.  
  686. static void __saveds trans_hx(struct CHXGTool *tool,  const LONG time,  char *sysx, int sw)
  687. {
  688.   LONG size;
  689.   int a,  b,  x,  y ;
  690.   UBYTE abuf[32];
  691.   char chr[4];
  692.   char *zbuf = NULL;
  693.  
  694.     //translate sysexbuffer into hex
  695.  
  696.   size = strlen(sysx);
  697.   zbuf = (char *)AllocVec(size+2,  MEMF_ANY|MEMF_CLEAR);
  698.   if(zbuf)
  699.      {
  700.        CopyMem(sysx,  zbuf,  size);
  701.        b=0;
  702.        for(a=0;a < size;a=a+2)
  703.            {
  704.              chr[0] = zbuf[a];
  705.              chr[1] = zbuf[a+1];
  706.  
  707.              x=(isdigit((int)chr[0]))? (chr[0]&0xF) : ((chr[0]&0xDF)-55); //this is the
  708.              y=(isdigit((int)chr[1]))? (chr[1]&0xF) : ((chr[1]&0xDF)-55); //the translate-core
  709.  
  710.              abuf[b++] = ((x<<4)|y);   //writing with bitmanipulation
  711.             }
  712.       //send hexdata
  713.  
  714.        FreeVec(zbuf);
  715.        if (sw == 0) sendsysex(abuf,  b,  tool,  time);
  716.        if (sw == 1) insertsysex(abuf,  b,  tool,  time);
  717.  
  718.      }
  719.  
  720. }
  721.  
  722.  
  723.  
  724. // Writes all values of the sliders and more  in the main window
  725.  
  726. LONG __saveds display_routine(struct Window *window, struct Gadget *gadget, ULONG value)
  727. {
  728.   char text[10];
  729.  
  730.   char *chortypet, *chordrywett, *chorreturnt, *chorpant, *chorsndchorrevt,
  731.        *chorinputt, *chorlfophasedifft, *inputt;
  732.  
  733.   char chortypetext[10];
  734.   char chordrywettext[10];
  735.   char chorreturntext[10];
  736.   char chorpantext[10];
  737.   char chorsndchorrevtext[10];
  738.   char chorlfophasedifftext[10];
  739.   char chorinputtext[10];
  740.   char inputtext[4];
  741.   char input[2][2] ={"M ","S "};
  742.  
  743.   const short id = gadget->GadgetID;
  744.   struct RastPort *rp = window->RPort;
  745.   char name[15];
  746.   int i=0;
  747.  
  748.   char chortypename[11][8]={
  749.   "Chorus 1","Chorus 2","Chorus 3","Chorus 4","Celeste1","Celeste2","Celeste3",
  750.   "Celeste4","Flanger1","Flanger2","Flanger3"};
  751.  
  752.  
  753.          switch (id)
  754.               {
  755.               case CHTYPE_GADGET:
  756.                 chortypet = chortypename[value];
  757.                 sprintf(chortypetext,  "%8.8s",  chortypet);
  758.                 SetAPen(rp, 7);
  759.                 SetBPen(rp, 6);
  760.                 SetDrMd(rp,  INVERSVID|JAM2);
  761.                 Move(rp,  83, 26);
  762.                 Text(rp,  chortypetext,  8);
  763.                 SetAPen(rp,  2);
  764.                 SetBPen(rp,  0);
  765.                 SetDrMd(rp,  JAM2);
  766.                     if (value == chorus1)
  767.                      {
  768.                      chordrywett = " Dry<->Wet";
  769.                      sprintf(chordrywettext, "%9.9s", chordrywett);
  770.                      Move(rp, 7, 136);
  771.                      Text(rp, chordrywettext, 9);
  772.  
  773.                      chorreturnt = "ChrReturn";
  774.                      sprintf(chorreturntext, "%9.9s", chorreturnt);
  775.                      Move(rp, 7, 147);
  776.                      Text(rp, chorreturntext, 9);
  777.  
  778.                      chorpant = "ChorusPan";
  779.                      sprintf(chorpantext, "%9.9s", chorpant);
  780.                      Move(rp, 7, 158);
  781.                      Text(rp, chorpantext, 9);
  782.  
  783.                      chorsndchorrevt = "SndCh>Rev";
  784.                      sprintf(chorsndchorrevtext, "%9.9s", chorsndchorrevt);
  785.                      Move(rp, 7, 169);
  786.                      Text(rp, chorsndchorrevtext, 9);
  787.  
  788.                      chorinputt = "    Input";
  789.                      sprintf(chorinputtext, "%9.9s", chorinputt);
  790.                      Move(rp, 7, 180);
  791.                      Text(rp, chorinputtext, 9);
  792.  
  793.                      chorlfophasedifft = "         ";
  794.                      sprintf(chorlfophasedifftext, "%9.9s", chorlfophasedifft);
  795.                      Move(rp, 7, 191);
  796.                      Text(rp, chorlfophasedifftext, 9);
  797.  
  798.                      SetAPen(rp,  1);
  799.                      }
  800.                     else if (value == chorus2)
  801.                      {
  802.                      chordrywett = "          ";
  803.                      sprintf(chordrywettext, "%9.9s", chordrywett);
  804.                      Move(rp, 7, 136);
  805.                      Text(rp, chordrywettext, 9);
  806.  
  807.                      chorreturnt = "         ";
  808.                      sprintf(chorreturntext, "%9.9s", chorreturnt);
  809.                      Move(rp, 7, 147);
  810.                      Text(rp, chorreturntext, 9);
  811.  
  812.                      chorpant = "         ";
  813.                      sprintf(chorpantext, "%9.9s", chorpant);
  814.                      Move(rp, 7, 158);
  815.                      Text(rp, chorpantext, 9);
  816.  
  817.                      chorsndchorrevt = "         ";
  818.                      sprintf(chorsndchorrevtext, "%9.9s", chorsndchorrevt);
  819.                      Move(rp, 7, 169);
  820.                      Text(rp, chorsndchorrevtext, 9);
  821.  
  822.                      chorinputt = "    Input";
  823.                      sprintf(chorinputtext, "%9.9s", chorinputt);
  824.                      Move(rp, 7, 180);
  825.                      Text(rp, chorinputtext, 9);
  826.  
  827.                      chorlfophasedifft = "         ";
  828.                      sprintf(chorlfophasedifftext, "%9.9s", chorlfophasedifft);
  829.                      Move(rp, 7, 191);
  830.                      Text(rp, chorlfophasedifftext, 9);
  831.  
  832.                      SetAPen(rp,  1);
  833.                      }
  834.                     else if (value == chorus3)
  835.                      {
  836.                      chordrywett = "          ";
  837.                      sprintf(chordrywettext, "%9.9s", chordrywett);
  838.                      Move(rp, 7, 136);
  839.                      Text(rp, chordrywettext, 9);
  840.  
  841.                      chorreturnt = "         ";
  842.                      sprintf(chorreturntext, "%9.9s", chorreturnt);
  843.                      Move(rp, 7, 147);
  844.                      Text(rp, chorreturntext, 9);
  845.  
  846.                      chorpant = "         ";
  847.                      sprintf(chorpantext, "%9.9s", chorpant);
  848.                      Move(rp, 7, 158);
  849.                      Text(rp, chorpantext, 9);
  850.  
  851.                      chorsndchorrevt = "         ";
  852.                      sprintf(chorsndchorrevtext, "%9.9s", chorsndchorrevt);
  853.                      Move(rp, 7, 169);
  854.                      Text(rp, chorsndchorrevtext, 9);
  855.  
  856.                      chorinputt = "    Input";
  857.                      sprintf(chorinputtext, "%9.9s", chorinputt);
  858.                      Move(rp, 7, 180);
  859.                      Text(rp, chorinputtext, 9);
  860.  
  861.                      chorlfophasedifft = "         ";
  862.                      sprintf(chorlfophasedifftext, "%9.9s", chorlfophasedifft);
  863.                      Move(rp, 7, 191);
  864.                      Text(rp, chorlfophasedifftext, 9);
  865.  
  866.                      SetAPen(rp,  1);
  867.                      }
  868.                     else if (value == chorus4)
  869.                      {
  870.                      chordrywett = "          ";
  871.                      sprintf(chordrywettext, "%9.9s", chordrywett);
  872.                      Move(rp, 7, 136);
  873.                      Text(rp, chordrywettext, 9);
  874.  
  875.                      chorreturnt = "         ";
  876.                      sprintf(chorreturntext, "%9.9s", chorreturnt);
  877.                      Move(rp, 7, 147);
  878.                      Text(rp, chorreturntext, 9);
  879.  
  880.                      chorpant = "         ";
  881.                      sprintf(chorpantext, "%9.9s", chorpant);
  882.                      Move(rp, 7, 158);
  883.                      Text(rp, chorpantext, 9);
  884.  
  885.                      chorsndchorrevt = "         ";
  886.                      sprintf(chorsndchorrevtext, "%9.9s", chorsndchorrevt);
  887.                      Move(rp, 7, 169);
  888.                      Text(rp, chorsndchorrevtext, 9);
  889.  
  890.                      chorinputt = "    Input";
  891.                      sprintf(chorinputtext, "%9.9s", chorinputt);
  892.                      Move(rp, 7, 180);
  893.                      Text(rp, chorinputtext, 9);
  894.  
  895.                      chorlfophasedifft = "         ";
  896.                      sprintf(chorlfophasedifftext, "%9.9s", chorlfophasedifft);
  897.                      Move(rp, 7, 191);
  898.                      Text(rp, chorlfophasedifftext, 9);
  899.  
  900.                      SetAPen(rp,  1);
  901.                      }
  902.                     else if (value == celeste1)
  903.                      {
  904.                      chordrywett = " Dry<->Wet";
  905.                      sprintf(chordrywettext, "%9.9s", chordrywett);
  906.                      Move(rp, 7, 136);
  907.                      Text(rp, chordrywettext, 9);
  908.  
  909.                      chorreturnt = "ChrReturn";
  910.                      sprintf(chorreturntext, "%9.9s", chorreturnt);
  911.                      Move(rp, 7, 147);
  912.                      Text(rp, chorreturntext, 9);
  913.  
  914.                      chorpant = "ChorusPan";
  915.                      sprintf(chorpantext, "%9.9s", chorpant);
  916.                      Move(rp, 7, 158);
  917.                      Text(rp, chorpantext, 9);
  918.  
  919.                      chorsndchorrevt = "SndCh>Rev";
  920.                      sprintf(chorsndchorrevtext, "%9.9s", chorsndchorrevt);
  921.                      Move(rp, 7, 169);
  922.                      Text(rp, chorsndchorrevtext, 9);
  923.  
  924.                      chorinputt = "    Input";
  925.                      sprintf(chorinputtext, "%9.9s", chorinputt);
  926.                      Move(rp, 7, 180);
  927.                      Text(rp, chorinputtext, 9);
  928.  
  929.                      chorlfophasedifft = "         ";
  930.                      sprintf(chorlfophasedifftext, "%9.9s", chorlfophasedifft);
  931.                      Move(rp, 7, 191);
  932.                      Text(rp, chorlfophasedifftext, 9);
  933.  
  934.                      SetAPen(rp,  1);
  935.                      }
  936.                     else if (value == celeste2)
  937.                      {
  938.                      chordrywett = "          ";
  939.                      sprintf(chordrywettext, "%9.9s", chordrywett);
  940.                      Move(rp, 7, 136);
  941.                      Text(rp, chordrywettext, 9);
  942.  
  943.                      chorreturnt = "         ";
  944.                      sprintf(chorreturntext, "%9.9s", chorreturnt);
  945.                      Move(rp, 7, 147);
  946.                      Text(rp, chorreturntext, 9);
  947.  
  948.                      chorpant = "         ";
  949.                      sprintf(chorpantext, "%9.9s", chorpant);
  950.                      Move(rp, 7, 158);
  951.                      Text(rp, chorpantext, 9);
  952.  
  953.                      chorsndchorrevt = "         ";
  954.                      sprintf(chorsndchorrevtext, "%9.9s", chorsndchorrevt);
  955.                      Move(rp, 7, 169);
  956.                      Text(rp, chorsndchorrevtext, 9);
  957.  
  958.                      chorinputt = "    Input";
  959.                      sprintf(chorinputtext, "%9.9s", chorinputt);
  960.                      Move(rp, 7, 180);
  961.                      Text(rp, chorinputtext, 9);
  962.  
  963.                      chorlfophasedifft = "         ";
  964.                      sprintf(chorlfophasedifftext, "%9.9s", chorlfophasedifft);
  965.                      Move(rp, 7, 191);
  966.                      Text(rp, chorlfophasedifftext, 9);
  967.  
  968.                      SetAPen(rp,  1);
  969.                      }
  970.                     else if (value == celeste3)
  971.                      {
  972.                      chordrywett = "          ";
  973.                      sprintf(chordrywettext, "%9.9s", chordrywett);
  974.                      Move(rp, 7, 136);
  975.                      Text(rp, chordrywettext, 9);
  976.  
  977.                      chorreturnt = "ChrReturn";
  978.                      sprintf(chorreturntext, "%9.9s", chorreturnt);
  979.                      Move(rp, 7, 147);
  980.                      Text(rp, chorreturntext, 9);
  981.  
  982.                      chorpant = "         ";
  983.                      sprintf(chorpantext, "%9.9s", chorpant);
  984.                      Move(rp, 7, 158);
  985.                      Text(rp, chorpantext, 9);
  986.  
  987.                      chorsndchorrevt = "         ";
  988.                      sprintf(chorsndchorrevtext, "%9.9s", chorsndchorrevt);
  989.                      Move(rp, 7, 169);
  990.                      Text(rp, chorsndchorrevtext, 9);
  991.  
  992.                      chorinputt = "    Input";
  993.                      sprintf(chorinputtext, "%9.9s", chorinputt);
  994.                      Move(rp, 7, 180);
  995.                      Text(rp, chorinputtext, 9);
  996.  
  997.                      chorlfophasedifft = "         ";
  998.                      sprintf(chorlfophasedifftext, "%9.9s", chorlfophasedifft);
  999.                      Move(rp, 7, 191);
  1000.                      Text(rp, chorlfophasedifftext, 9);
  1001.  
  1002.                      SetAPen(rp,  1);
  1003.                      }
  1004.                     else if (value == celeste4)
  1005.                      {
  1006.                      chordrywett = "          ";
  1007.                      sprintf(chordrywettext, "%9.9s", chordrywett);
  1008.                      Move(rp, 7, 136);
  1009.                      Text(rp, chordrywettext, 9);
  1010.  
  1011.                      chorreturnt = "         ";
  1012.                      sprintf(chorreturntext, "%9.9s", chorreturnt);
  1013.                      Move(rp, 7, 147);
  1014.                      Text(rp, chorreturntext, 9);
  1015.  
  1016.                      chorpant = "         ";
  1017.                      sprintf(chorpantext, "%9.9s", chorpant);
  1018.                      Move(rp, 7, 158);
  1019.                      Text(rp, chorpantext, 9);
  1020.  
  1021.                      chorsndchorrevt = "         ";
  1022.                      sprintf(chorsndchorrevtext, "%9.9s", chorsndchorrevt);
  1023.                      Move(rp, 7, 169);
  1024.                      Text(rp, chorsndchorrevtext, 9);
  1025.  
  1026.                      chorinputt = "    Input";
  1027.                      sprintf(chorinputtext, "%9.9s", chorinputt);
  1028.                      Move(rp, 7, 180);
  1029.                      Text(rp, chorinputtext, 9);
  1030.  
  1031.                      chorlfophasedifft = "         ";
  1032.                      sprintf(chorlfophasedifftext, "%9.9s", chorlfophasedifft);
  1033.                      Move(rp, 7, 191);
  1034.                      Text(rp, chorlfophasedifftext, 9);
  1035.  
  1036.                      SetAPen(rp,  1);
  1037.                      }
  1038.                     else if (value == flanger1)
  1039.                      {
  1040.                      chordrywett = " Dry<->Wet";
  1041.                      sprintf(chordrywettext, "%9.9s", chordrywett);
  1042.                      Move(rp, 7, 136);
  1043.                      Text(rp, chordrywettext, 9);
  1044.  
  1045.                      chorreturnt = "ChrReturn";
  1046.                      sprintf(chorreturntext, "%9.9s", chorreturnt);
  1047.                      Move(rp, 7, 147);
  1048.                      Text(rp, chorreturntext, 9);
  1049.  
  1050.                      chorpant = "ChorusPan";
  1051.                      sprintf(chorpantext, "%9.9s", chorpant);
  1052.                      Move(rp, 7, 158);
  1053.                      Text(rp, chorpantext, 9);
  1054.  
  1055.                      chorsndchorrevt = "SndCh>Rev";
  1056.                      sprintf(chorsndchorrevtext, "%9.9s", chorsndchorrevt);
  1057.                      Move(rp, 7, 169);
  1058.                      Text(rp, chorsndchorrevtext, 9);
  1059.  
  1060.                      chorinputt = "          ";
  1061.                      sprintf(chorinputtext, "%9.9s", chorinputt);
  1062.                      Move(rp, 7, 180);
  1063.                      Text(rp, chorinputtext, 9);
  1064.  
  1065.                      chorlfophasedifft = "LFOPhDiff";
  1066.                      sprintf(chorlfophasedifftext, "%9.9s", chorlfophasedifft);
  1067.                      Move(rp, 7, 191);
  1068.                      Text(rp, chorlfophasedifftext, 9);
  1069.  
  1070.                      SetAPen(rp,  1);
  1071.                      }
  1072.                     else if (value == flanger2)
  1073.                      {
  1074.                      chordrywett = "          ";
  1075.                      sprintf(chordrywettext, "%9.9s", chordrywett);
  1076.                      Move(rp, 7, 136);
  1077.                      Text(rp, chordrywettext, 9);
  1078.  
  1079.                      chorreturnt = "         ";
  1080.                      sprintf(chorreturntext, "%9.9s", chorreturnt);
  1081.                      Move(rp, 7, 147);
  1082.                      Text(rp, chorreturntext, 9);
  1083.  
  1084.                      chorpant = "         ";
  1085.                      sprintf(chorpantext, "%9.9s", chorpant);
  1086.                      Move(rp, 7, 158);
  1087.                      Text(rp, chorpantext, 9);
  1088.  
  1089.                      chorsndchorrevt = "         ";
  1090.                      sprintf(chorsndchorrevtext, "%9.9s", chorsndchorrevt);
  1091.                      Move(rp, 7, 169);
  1092.                      Text(rp, chorsndchorrevtext, 9);
  1093.  
  1094.                      chorinputt = "          ";
  1095.                      sprintf(chorinputtext, "%9.9s", chorinputt);
  1096.                      Move(rp, 7, 180);
  1097.                      Text(rp, chorinputtext, 9);
  1098.  
  1099.                      chorlfophasedifft = "LFOPhDiff";
  1100.                      sprintf(chorlfophasedifftext, "%9.9s", chorlfophasedifft);
  1101.                      Move(rp, 7, 191);
  1102.                      Text(rp, chorlfophasedifftext, 9);
  1103.  
  1104.                      SetAPen(rp,  1);
  1105.                      }
  1106.                     else if (value == flanger3)
  1107.                      {
  1108.                      chordrywett = "          ";
  1109.                      sprintf(chordrywettext, "%9.9s", chordrywett);
  1110.                      Move(rp, 7, 136);
  1111.                      Text(rp, chordrywettext, 9);
  1112.  
  1113.                      chorreturnt = "         ";
  1114.                      sprintf(chorreturntext, "%9.9s", chorreturnt);
  1115.                      Move(rp, 7, 147);
  1116.                      Text(rp, chorreturntext, 9);
  1117.  
  1118.                      chorpant = "         ";
  1119.                      sprintf(chorpantext, "%9.9s", chorpant);
  1120.                      Move(rp, 7, 158);
  1121.                      Text(rp, chorpantext, 9);
  1122.  
  1123.                      chorsndchorrevt = "         ";
  1124.                      sprintf(chorsndchorrevtext, "%9.9s", chorsndchorrevt);
  1125.                      Move(rp, 7, 169);
  1126.                      Text(rp, chorsndchorrevtext, 9);
  1127.  
  1128.                      chorinputt = "          ";
  1129.                      sprintf(chorinputtext, "%9.9s", chorinputt);
  1130.                      Move(rp, 7, 180);
  1131.                      Text(rp, chorinputtext, 9);
  1132.  
  1133.                      chorlfophasedifft = "LFOPhDiff";
  1134.                      sprintf(chorlfophasedifftext, "%9.9s", chorlfophasedifft);
  1135.                      Move(rp, 7, 191);
  1136.                      Text(rp, chorlfophasedifftext, 9);
  1137.  
  1138.                      SetAPen(rp,  1);
  1139.                      }
  1140.                 Move(rp,  240,  37);
  1141.                 SetAPen(rp,  1);
  1142.                 SetBPen(rp,  0);
  1143.                 SetDrMd(rp,  JAM2);
  1144.                 sprintf(text,  "%3ld",  value);
  1145.                 Text(rp,  text,  3);
  1146.                 break;
  1147.               case CHLFOFREQ_GADGET:
  1148.                 Move(rp,  240,  48);
  1149.                 SetAPen(rp,  1);
  1150.                 SetBPen(rp,  0);
  1151.                 SetDrMd(rp,  JAM2);
  1152.                 sprintf(text,  "%3ld",  value);
  1153.                 Text(rp,  text,  3);
  1154.                 break;
  1155.               case CHLFOPMDEPTH_GADGET:
  1156.                 Move(rp,  240,  59);
  1157.                 SetAPen(rp,  1);
  1158.                 SetBPen(rp,  0);
  1159.                 SetDrMd(rp,  JAM2);
  1160.                 sprintf(text,  "%3ld",  value);
  1161.                 Text(rp,  text,  3);
  1162.                 break;
  1163.               case CHFEEDBLEVEL_GADGET:
  1164.                 if (value == 0) value = 1;
  1165.                 Move(rp,  240,  70);
  1166.                 SetAPen(rp,  1);
  1167.                 SetBPen(rp,  0);
  1168.                 SetDrMd(rp,  JAM2);
  1169.                 sprintf(text,  "%3ld",  value);
  1170.                 Text(rp,  text,  3);
  1171.                 break;
  1172.               case CHDELAYOFFSET_GADGET:
  1173.                 Move(rp,  240,  81);
  1174.                 SetAPen(rp,  1);
  1175.                 SetBPen(rp,  0);
  1176.                 SetDrMd(rp,  JAM2);
  1177.                 sprintf(text,  "%3ld",  value);
  1178.                 Text(rp,  text,  3);
  1179.                 break;
  1180.               case CHEQLOWFREQ_GADGET:
  1181.                 Move(rp,  240,  92);
  1182.                 SetAPen(rp,  1);
  1183.                 SetBPen(rp,  0);
  1184.                 SetDrMd(rp,  JAM2);
  1185.                 sprintf(text,  "%3ld",  value + 8);
  1186.                 Text(rp,  text,  3);
  1187.                 break;
  1188.               case CHEQLOWGAIN_GADGET:
  1189.                 Move(rp,  240,  103);
  1190.                 SetAPen(rp,  1);
  1191.                 SetBPen(rp,  0);
  1192.                 SetDrMd(rp,  JAM2);
  1193.                 sprintf(text,  "%3ld",  value + 52);
  1194.                 Text(rp,  text,  3);
  1195.                 break;
  1196.               case CHEQHIGHFREQ_GADGET:
  1197.                 Move(rp,  240,  114);
  1198.                 SetAPen(rp,  1);
  1199.                 SetBPen(rp,  0);
  1200.                 SetDrMd(rp,  JAM2);
  1201.                 sprintf(text,  "%3ld",  value + 28);
  1202.                 Text(rp,  text,  3);
  1203.                 break;
  1204.               case CHEQHIGHGAIN_GADGET:
  1205.                 Move(rp,  240,  125);
  1206.                 SetAPen(rp,  1);
  1207.                 SetBPen(rp,  0);
  1208.                 SetDrMd(rp,  JAM2);
  1209.                 sprintf(text,  "%3ld",  value + 52);
  1210.                 Text(rp,  text,  3);
  1211.                 break;
  1212.               case CHDRYWET_GADGET:
  1213.                 if (value == 0) value = 1;
  1214.                 Move(rp,  240,  136);
  1215.                 SetAPen(rp,  1);
  1216.                 SetBPen(rp,  0);
  1217.                 SetDrMd(rp,  JAM2);
  1218.                 sprintf(text,  "%3ld",  value);
  1219.                 Text(rp,  text,  3);
  1220.                 break;
  1221.               case CHRETURN_GADGET:
  1222.                 Move(rp,  240,  147);
  1223.                 SetAPen(rp,  1);
  1224.                 SetBPen(rp,  0);
  1225.                 SetDrMd(rp,  JAM2);
  1226.                 sprintf(text,  "%3ld",  value);
  1227.                 Text(rp,  text,  3);
  1228.                 break;
  1229.               case CHPAN_GADGET:
  1230.                 Move(rp,  240,  158);
  1231.                 SetAPen(rp,  1);
  1232.                 SetBPen(rp,  0);
  1233.                 SetDrMd(rp,  JAM2);
  1234.                 sprintf(text,  "%3ld",  value);
  1235.                 Text(rp,  text,  3);
  1236.                 break;
  1237.               case CHSNDCHORREV_GADGET:
  1238.                 Move(rp,  240,  169);
  1239.                 SetAPen(rp,  1);
  1240.                 SetBPen(rp,  0);
  1241.                 SetDrMd(rp,  JAM2);
  1242.                 sprintf(text,  "%3ld",  value);
  1243.                 Text(rp,  text,  3);
  1244.                 break;
  1245.               case CHINPUT_GADGET:
  1246.                 inputt = input[value];
  1247.                 Move(rp,  255,  180);
  1248.                 SetAPen(rp,  1);
  1249.                 SetBPen(rp,  0);
  1250.                 SetDrMd(rp,  JAM2);
  1251.                 sprintf(inputtext,  "%.2s",  inputt);
  1252.                 Text(rp,  inputtext,  2);
  1253.                 break;
  1254.               case CHLFOPHASEDIFF_GADGET:
  1255.                 Move(rp,  240, 191);
  1256.                 SetAPen(rp,  1);
  1257.                 SetBPen(rp,  0);
  1258.                 SetDrMd(rp,  JAM2);
  1259.                 sprintf(text,  "%3ld",  value + 4);
  1260.                 Text(rp,  text,  3);
  1261.                 break;
  1262.               default:
  1263.                 break;
  1264.               }
  1265.  
  1266.   return value;
  1267. }
  1268.  
  1269. //to hear the changes
  1270.  
  1271. static void send_note(struct CHXGTool *tool,  const long time,  const UBYTE note)
  1272. {
  1273.   struct NoteEvent *on_event = (struct NoteEvent *)(*functions->allocevent)();
  1274.   if (on_event)
  1275.     {
  1276.       struct NoteEvent *off_event = (struct NoteEvent *)(*functions->allocevent)();
  1277.       if (off_event)
  1278.         {
  1279.           on_event->next  =
  1280.           off_event->next = NULL;
  1281.  
  1282.           on_event->type  =
  1283.           off_event->type = EVENT_VOICE;
  1284.  
  1285.           on_event->status  = MIDI_NOTEON;
  1286.           off_event->status = MIDI_NOTEOFF;
  1287.  
  1288.           on_event->value  =
  1289.           off_event->value = note;
  1290.  
  1291.           on_event->velocity = 80;
  1292.  
  1293.           on_event->time  = time;
  1294.           off_event->time = time + 96;
  1295.  
  1296.           on_event->tool  =
  1297.           off_event->tool = tool->tool.next;
  1298.  
  1299.           (*functions->qevent)(on_event);
  1300.           (*functions->qevent)(off_event);
  1301.         }
  1302.       else
  1303.         {
  1304.           (*functions->freeevent)(on_event);
  1305.         }
  1306.     }
  1307. }
  1308.  
  1309. static void initvalues(struct Window *window, struct CHXGTool *tool, int init, UBYTE typeswitch)
  1310. {
  1311.  int i;
  1312.  int initval[]={
  1313.  0x06,0x36,0x4d,0x6a,0x14,0x0c,0x12,0x0c,0x40,0x40,0x40,0x00,0x00,0x00,    //Chorus1
  1314.  0x08,0x3f,0x40,0x1e,0x14,0x0a,0x0e,0x06,0x40,0x00,0x00,0x00,0x00,0x00,    //Chorus2
  1315.  0x04,0x2c,0x40,0x6e,0x14,0x0c,0x12,0x0e,0x40,0x00,0x00,0x00,0x00,0x00,    //Chorus3
  1316.  0x07,0x20,0x45,0x68,0x14,0x0c,0x12,0x0c,0x40,0x00,0x00,0x00,0x01,0x00,    //Chorus4
  1317.  
  1318.  0x0c,0x20,0x40,0x00,0x14,0x0c,0x12,0x0c,0x7f,0x40,0x40,0x00,0x00,0x00,    //Celeste1
  1319.  0x1c,0x12,0x5a,0x02,0x14,0x0a,0x0e,0x08,0x54,0x00,0x00,0x00,0x00,0x00,    //Celeste2
  1320.  0x04,0x3f,0x2c,0x02,0x14,0x0c,0x12,0x10,0x7f,0x00,0x00,0x00,0x00,0x00,    //Celeste3
  1321.  0x07,0x1d,0x40,0x00,0x14,0x0c,0x17,0x0e,0x7f,0x00,0x00,0x00,0x01,0x00,    //Celeste4
  1322.  
  1323.  0x0e,0x0e,0x68,0x02,0x14,0x0c,0x12,0x0c,0x60,0x40,0x40,0x00,0x00,0x00,    //Flanger1
  1324.  0x20,0x11,0x1a,0x02,0x14,0x0c,0x12,0x08,0x60,0x00,0x00,0x00,0x00,0x00,    //Flanger2
  1325.  0x03,0x6d,0x6d,0x02,0x14,0x0c,0x12,0x0c,0x7f,0x00,0x00,0x00,0x00,0x00 };  //Flanger3
  1326.  
  1327.  if (typeswitch == 1)
  1328.   {
  1329.     tool->chorlfofrequence  = (UBYTE)initval[0+(init*14)];
  1330.     tool->chorlfopmdepth    = (UBYTE)initval[1+(init*14)];
  1331.     tool->chorfeedbacklevel = (UBYTE)initval[2+(init*14)];
  1332.     tool->chordelayoffset   = (UBYTE)initval[3+(init*14)];
  1333.     tool->choreqlowfreq     = (UBYTE)initval[4+(init*14)];
  1334.     tool->choreqlowgain     = (UBYTE)initval[5+(init*14)];
  1335.     tool->choreqhighfreq    = (UBYTE)initval[6+(init*14)];
  1336.     tool->choreqhighgain    = (UBYTE)initval[7+(init*14)];
  1337.     tool->chordrywet        = (UBYTE)initval[8+(init*14)];
  1338.     tool->chorreturn        = (UBYTE)initval[9+(init*14)];
  1339.     tool->chorpan           = (UBYTE)initval[10+(init*14)];
  1340.     tool->chorsndchorrev    = (UBYTE)initval[11+(init*14)];
  1341.     tool->chorinput         = (UBYTE)initval[12+(init*14)];
  1342.     tool->chorlfophasediff  = (UBYTE)initval[13+(init*14)];
  1343.   }
  1344.  
  1345.  (*functions->ModifyEmbossedProp)(window,  CHLFOFREQ_GADGET,  tool->chorlfofrequence,  0,  0,  0,  0,  0);
  1346.  (*functions->ModifyEmbossedProp)(window,  CHLFOPMDEPTH_GADGET,  tool->chorlfopmdepth,  0,  0,  0,  0,  0);
  1347.  (*functions->ModifyEmbossedProp)(window,  CHFEEDBLEVEL_GADGET,  tool->chorfeedbacklevel,  0,  0,  0,  0,  0);
  1348.  (*functions->ModifyEmbossedProp)(window,  CHDELAYOFFSET_GADGET,  tool->chordelayoffset,  0,  0,  0,  0,  0);
  1349.  (*functions->ModifyEmbossedProp)(window,  CHEQLOWFREQ_GADGET,  tool->choreqlowfreq,  0,  0,  0,  0,  0);
  1350.  (*functions->ModifyEmbossedProp)(window,  CHEQLOWGAIN_GADGET,  tool->choreqlowgain,  0,  0,  0,  0,  0);
  1351.  (*functions->ModifyEmbossedProp)(window,  CHEQHIGHFREQ_GADGET,  tool->choreqhighfreq,  0,  0,  0,  0,  0);
  1352.  (*functions->ModifyEmbossedProp)(window,  CHEQHIGHGAIN_GADGET,  tool->choreqhighgain,  0,  0,  0,  0,  0);
  1353.  (*functions->ModifyEmbossedProp)(window,  CHDRYWET_GADGET,  tool->chordrywet,  0,  0,  0,  0,  0);
  1354.  (*functions->ModifyEmbossedProp)(window,  CHRETURN_GADGET,  tool->chorreturn,  0,  0,  0,  0,  0);
  1355.  (*functions->ModifyEmbossedProp)(window,  CHPAN_GADGET,  tool->chorpan,  0,  0,  0,  0,  0);
  1356.  (*functions->ModifyEmbossedProp)(window,  CHSNDCHORREV_GADGET,  tool->chorsndchorrev,  0,  0,  0,  0,  0);
  1357.  (*functions->ModifyEmbossedProp)(window,  CHINPUT_GADGET,  tool->chorinput,  0,  0,  0,  0,  0);
  1358.  (*functions->ModifyEmbossedProp)(window,  CHLFOPHASEDIFF_GADGET,  tool->chorlfophasediff,  0,  0,  0,  0,  0);
  1359.  
  1360.  for (i = CHLFOFREQ_GADGET; i <= CHLFOPHASEDIFF_GADGET; i += 3)
  1361.      {
  1362.         (*functions->DrawEmbossedProp)(window,  i);
  1363.      }
  1364. }
  1365.  
  1366. //the center off all
  1367.  
  1368. static void __saveds edittoolcode(struct CHXGTool *tool)
  1369. {
  1370.   struct IntuiMessage *message;
  1371.   struct Window *window;
  1372.   LONG class,  code,  time;
  1373.   struct Gadget *gadget;
  1374.   struct NewWindow *newwindow;
  1375.   int i,  ini, revres=0;
  1376.   char  *chortypebt, *storagebt;
  1377.   char chortypebyte[11][4] ={
  1378.   "4100", "4101", "4102", "4108", "4200", "4201", "4202", "4208", "4300", "4301", "4308"};
  1379.  
  1380.   CHXGNewWindowStructure1.Screen = functions->screen;
  1381.  
  1382.   if (tool->tool.touched & TOUCH_EDIT)
  1383.     {
  1384.       CHXGNewWindowStructure1.LeftEdge = tool->tool.left;
  1385.       CHXGNewWindowStructure1.TopEdge = tool->tool.top;
  1386.       CHXGNewWindowStructure1.Width = tool->tool.width;
  1387.       CHXGNewWindowStructure1.Height = tool->tool.height;
  1388.  
  1389.       tool->chortypesysex = tool->storage1;
  1390.       tool->chorlfofrequencesysex = tool->storage2;
  1391.       tool->chorlfopmdepthsysex = tool->storage3;
  1392.       tool->chorfeedbacklevelsysex = tool->storage4;
  1393.       tool->chordelayoffsetsysex = tool->storage5;
  1394.       tool->choreqlowfreqsysex = tool->storage6;
  1395.       tool->choreqlowgainsysex = tool->storage7;
  1396.       tool->choreqhighfreqsysex = tool->storage8;
  1397.       tool->choreqhighgainsysex = tool->storage9;
  1398.       tool->chordrywetsysex = tool->storage10;
  1399.       tool->chorreturnsysex = tool->storage11;
  1400.       tool->chorpansysex = tool->storage12;
  1401.       tool->chorsndchorrevsysex = tool->storage13;
  1402.       tool->chorinputsysex = tool->storage14;
  1403.       tool->chorlfophasediffsysex = tool->storage15;
  1404.  
  1405.     }
  1406.   
  1407.   if (!tool->tool.touched)
  1408.     {
  1409.       CHXG_tool_init(tool);
  1410.     }
  1411.  
  1412.   newwindow = (struct NewWindow *) (*functions->DupeNewWindow)(&CHXGNewWindowStructure1);
  1413.   if (!newwindow)
  1414.     {
  1415.       return;
  1416.     }
  1417.   newwindow->Title = 0;
  1418.   newwindow->Flags |= BORDERLESS;
  1419.   newwindow->Flags &= ~0xF;
  1420.   newwindow->BlockPen = 0;
  1421.   newwindow->DetailPen = 0;
  1422.  
  1423.   window = (struct Window *) (*functions->FlashyOpenWindow)(newwindow);
  1424.   if (!window) return;
  1425.  
  1426.   tool->tool.window = window;
  1427.   (*functions->EmbossWindowOn)(window, WINDOWCLOSE|WINDOWDEPTH|WINDOWDRAG,  CHXG_NAME, (short)-1, (short)-1, 0, 0);
  1428.  
  1429.  
  1430.   (*functions->FatEmbossedPropOn)(window,  CHTYPE_GADGET,  CHTYPEDOWN_GADGET,
  1431.                                   CHTYPEUP_GADGET, (void *)display_routine,  11,  1);
  1432.  
  1433.   (*functions->FatEmbossedPropOn)(window,  CHLFOFREQ_GADGET,  CHLFOFREQDOWN_GADGET,
  1434.                                   CHLFOFREQUP_GADGET, (void *)display_routine, 128,  1);
  1435.  
  1436.   (*functions->FatEmbossedPropOn)(window,  CHLFOPMDEPTH_GADGET,  CHLFOPMDEPTHDOWN_GADGET,
  1437.                                   CHLFOPMDEPTHUP_GADGET, (void *)display_routine, 128,  1);
  1438.  
  1439.   (*functions->FatEmbossedPropOn)(window,  CHFEEDBLEVEL_GADGET,  CHFEEDBLEVELDOWN_GADGET,
  1440.                                   CHFEEDBLEVELUP_GADGET, (void *)display_routine, 128,  1);
  1441.  
  1442.   (*functions->FatEmbossedPropOn)(window,  CHDELAYOFFSET_GADGET,  CHDELAYOFFSETDOWN_GADGET,
  1443.                                   CHDELAYOFFSETUP_GADGET, (void *)display_routine, 128,  1);
  1444.  
  1445.   (*functions->FatEmbossedPropOn)(window,  CHEQLOWFREQ_GADGET,  CHEQLOWFREQDOWN_GADGET,
  1446.                                   CHEQLOWFREQUP_GADGET, (void *)display_routine,  21,  1);
  1447.  
  1448.   (*functions->FatEmbossedPropOn)(window,  CHEQLOWGAIN_GADGET,  CHEQLOWGAINDOWN_GADGET,
  1449.                                   CHEQLOWGAINUP_GADGET, (void *)display_routine,  25,  1);
  1450.  
  1451.   (*functions->FatEmbossedPropOn)(window,  CHEQHIGHFREQ_GADGET,  CHEQHIGHFREQDOWN_GADGET,
  1452.                                   CHEQHIGHFREQUP_GADGET, (void *)display_routine,  31,  1);
  1453.  
  1454.   (*functions->FatEmbossedPropOn)(window,  CHEQHIGHGAIN_GADGET,  CHEQHIGHGAINDOWN_GADGET,
  1455.                                   CHEQHIGHGAINUP_GADGET, (void *)display_routine,  25,  1);
  1456.  
  1457.   (*functions->FatEmbossedPropOn)(window,  CHDRYWET_GADGET,  CHDRYWETDOWN_GADGET,
  1458.                                   CHDRYWETUP_GADGET, (void *)display_routine,  128,  1);
  1459.  
  1460.   (*functions->FatEmbossedPropOn)(window,  CHRETURN_GADGET,  CHRETURNDOWN_GADGET,
  1461.                                   CHRETURNUP_GADGET, (void *)display_routine,  128,  1);
  1462.  
  1463.   (*functions->FatEmbossedPropOn)(window,  CHPAN_GADGET,  CHPANDOWN_GADGET,
  1464.                                   CHPANUP_GADGET, (void *)display_routine,  128,  1);
  1465.  
  1466.   (*functions->FatEmbossedPropOn)(window,  CHSNDCHORREV_GADGET,  CHSNDCHORREVDOWN_GADGET,
  1467.                                   CHSNDCHORREVUP_GADGET, (void *)display_routine,  128,  1);
  1468.  
  1469.   (*functions->FatEmbossedPropOn)(window,  CHINPUT_GADGET,  CHINPUTDOWN_GADGET,
  1470.                                   CHINPUTUP_GADGET, (void *)display_routine,  2,  1);
  1471.  
  1472.   (*functions->FatEmbossedPropOn)(window,  CHLFOPHASEDIFF_GADGET,  CHLFOPHASEDIFFDOWN_GADGET,
  1473.                                   CHLFOPHASEDIFFUP_GADGET, (void *)display_routine,  121,  1);
  1474.  
  1475.  
  1476.   (*functions->EmbossOn)(window,  WRITE_GADGET,  1);
  1477.  
  1478.  
  1479.   (*functions->ModifyEmbossedProp)(window,  CHTYPE_GADGET,  tool->chortype,  0,  0,  0,  0,  0);
  1480.   (*functions->DrawEmbossedProp)(window,  CHTYPE_GADGET);
  1481.  
  1482.   initvalues(window, tool, (int)tool->chortype, 0);
  1483.   send_note(tool,  functions->timenow,  60);
  1484.  
  1485.   for (;;)
  1486.     {
  1487.  
  1488.       message = (struct IntuiMessage *) (*functions->GetIntuiMessage)(window);
  1489.       class = message->Class;
  1490.       code = message->Code;
  1491.       gadget = (struct Gadget *) message->IAddress;
  1492.       class = (*functions->SystemGadgets)(window, class, gadget, code);
  1493.  
  1494.       ReplyMsg((struct Message *)message);
  1495.  
  1496.  
  1497.       if (class == CLOSEWINDOW)
  1498.         {
  1499.           break;
  1500.         }
  1501.       else if (class == GADGETDOWN)
  1502.         {
  1503.           const short id = gadget->GadgetID;
  1504.           switch (id)
  1505.             {
  1506.             case CHTYPE_GADGET:
  1507.               tool->chortype = (UBYTE) (*functions->DragEmbossedProp)(window,  CHTYPE_GADGET);
  1508.               chortypebt = chortypebyte[tool->chortype];
  1509.               sprintf(tool->storage1, "F043104C020120%.4sF7",chortypebt);
  1510.               tool->chortypesysex = tool->storage1;
  1511.               time = functions->timenow;
  1512.               trans_hx(tool,  time,  tool->chortypesysex, 0);
  1513.               ini = (int)tool->chortype;
  1514.               initvalues(window, tool, ini,1);
  1515.               break;
  1516.             case CHTYPEDOWN_GADGET:
  1517.               tool->chortype = (UBYTE) (*functions->ShiftEmbossedProp)(window,  CHTYPE_GADGET,  -1,  0);
  1518.               chortypebt = chortypebyte[tool->chortype];
  1519.               sprintf(tool->storage1, "F043104C020120%.4sF7",chortypebt);
  1520.               tool->chortypesysex = tool->storage1;
  1521.               time = functions->timenow;
  1522.               trans_hx(tool,  time,  tool->chortypesysex, 0);
  1523.               ini = (int)tool->chortype;
  1524.               initvalues(window, tool, ini,1);
  1525.               break;
  1526.             case CHTYPEUP_GADGET:
  1527.               tool->chortype = (UBYTE) (*functions->ShiftEmbossedProp)(window,  CHTYPE_GADGET,  1,  0);
  1528.               chortypebt = chortypebyte[tool->chortype];
  1529.               sprintf(tool->storage1, "F043104C020120%.4sF7",chortypebt);
  1530.               tool->chortypesysex = tool->storage1;
  1531.               time = functions->timenow;
  1532.               trans_hx(tool,  time,  tool->chortypesysex, 0);
  1533.               ini = (int)tool->chortype;
  1534.               initvalues(window, tool, ini,1);
  1535.               break;
  1536.             case CHLFOFREQ_GADGET:
  1537.               tool->chorlfofrequence = (UBYTE) (*functions->DragEmbossedProp)(window,  CHLFOFREQ_GADGET);
  1538.               sprintf(tool->storage2, "F043104C020122%02lxF7",tool->chorlfofrequence);
  1539.               tool->chorlfofrequencesysex = tool->storage2;
  1540.               time = functions->timenow;
  1541.               trans_hx(tool,  time,  tool->chorlfofrequencesysex, 0);
  1542.               break;
  1543.             case CHLFOFREQDOWN_GADGET:
  1544.               tool->chorlfofrequence = (UBYTE) (*functions->ShiftEmbossedProp)(window,  CHLFOFREQ_GADGET,  -1,  0);
  1545.               sprintf(tool->storage2, "F043104C020122%02lxF7",tool->chorlfofrequence);
  1546.               tool->chorlfofrequencesysex = tool->storage2;
  1547.               time = functions->timenow;
  1548.               trans_hx(tool,  time,  tool->chorlfofrequencesysex, 0);
  1549.               break;
  1550.             case CHLFOFREQUP_GADGET:
  1551.               tool->chorlfofrequence = (UBYTE) (*functions->ShiftEmbossedProp)(window,  CHLFOFREQ_GADGET,  1,  0);
  1552.               sprintf(tool->storage2, "F043104C020122%02lxF7",tool->chorlfofrequence);
  1553.               tool->chorlfofrequencesysex = tool->storage2;
  1554.               time = functions->timenow;
  1555.               trans_hx(tool,  time,  tool->chorlfofrequencesysex, 0);
  1556.               break;
  1557.             case CHLFOPMDEPTH_GADGET:
  1558.               tool->chorlfopmdepth = (UBYTE) (*functions->DragEmbossedProp)(window,  CHLFOPMDEPTH_GADGET);
  1559.               sprintf(tool->storage3, "F043104C020123%02lxF7",tool->chorlfopmdepth);
  1560.               tool->chorlfopmdepthsysex = tool->storage3;
  1561.               time = functions->timenow;
  1562.               trans_hx(tool,  time,  tool->chorlfopmdepthsysex, 0);
  1563.               break;
  1564.             case CHLFOPMDEPTHDOWN_GADGET:
  1565.               tool->chorlfopmdepth = (UBYTE) (*functions->ShiftEmbossedProp)(window,  CHLFOPMDEPTH_GADGET,  -1,  0);
  1566.               sprintf(tool->storage3, "F043104C020123%02lxF7",tool->chorlfopmdepth);
  1567.               tool->chorlfopmdepthsysex = tool->storage3;
  1568.               time = functions->timenow;
  1569.               trans_hx(tool,  time,  tool->chorlfopmdepthsysex, 0);
  1570.               break;
  1571.             case CHLFOPMDEPTHUP_GADGET:
  1572.               tool->chorlfopmdepth = (UBYTE) (*functions->ShiftEmbossedProp)(window,  CHLFOPMDEPTH_GADGET,  1,  0);
  1573.               sprintf(tool->storage3, "F043104C020123%02lxF7",tool->chorlfopmdepth);
  1574.               tool->chorlfopmdepthsysex = tool->storage3;
  1575.               time = functions->timenow;
  1576.               trans_hx(tool,  time,  tool->chorlfopmdepthsysex, 0);
  1577.               break;
  1578.             case CHFEEDBLEVEL_GADGET:
  1579.               tool->chorfeedbacklevel = (UBYTE) (*functions->DragEmbossedProp)(window,  CHFEEDBLEVEL_GADGET);
  1580.               sprintf(tool->storage4, "F043104C020124%02lxF7",tool->chorfeedbacklevel);
  1581.               tool->chorfeedbacklevelsysex = tool->storage4;
  1582.               time = functions->timenow;
  1583.               trans_hx(tool,  time,  tool->chorfeedbacklevelsysex, 0);
  1584.               break;
  1585.             case CHFEEDBLEVELDOWN_GADGET:
  1586.               tool->chorfeedbacklevel = (UBYTE) (*functions->ShiftEmbossedProp)(window,  CHFEEDBLEVEL_GADGET,  -1,  0);
  1587.               sprintf(tool->storage4, "F043104C020124%02lxF7",tool->chorfeedbacklevel);
  1588.               tool->chorfeedbacklevelsysex = tool->storage4;
  1589.               time = functions->timenow;
  1590.               trans_hx(tool,  time,  tool->chorfeedbacklevelsysex, 0);
  1591.               break;
  1592.             case CHFEEDBLEVELUP_GADGET:
  1593.               tool->chorfeedbacklevel = (UBYTE) (*functions->ShiftEmbossedProp)(window,  CHFEEDBLEVEL_GADGET,  1,  0);
  1594.               sprintf(tool->storage4, "F043104C020124%02lxF7",tool->chorfeedbacklevel);
  1595.               tool->chorfeedbacklevelsysex = tool->storage4;
  1596.               time = functions->timenow;
  1597.               trans_hx(tool,  time,  tool->chorfeedbacklevelsysex, 0);
  1598.               break;
  1599.             case CHDELAYOFFSET_GADGET:
  1600.               tool->chordelayoffset = (UBYTE) (*functions->DragEmbossedProp)(window,  CHDELAYOFFSET_GADGET);
  1601.               sprintf(tool->storage5, "F043104C020125%02lxF7",tool->chordelayoffset);
  1602.               tool->chordelayoffsetsysex = tool->storage5;
  1603.               time = functions->timenow;
  1604.               trans_hx(tool,  time,  tool->chordelayoffsetsysex, 0);
  1605.               break;
  1606.             case CHDELAYOFFSETDOWN_GADGET:
  1607.               tool->chordelayoffset = (UBYTE) (*functions->ShiftEmbossedProp)(window,  CHDELAYOFFSET_GADGET,  -1,  0);
  1608.               sprintf(tool->storage5, "F043104C020125%02lxF7",tool->chordelayoffset);
  1609.               tool->chordelayoffsetsysex = tool->storage5;
  1610.               time = functions->timenow;
  1611.               trans_hx(tool,  time,  tool->chordelayoffsetsysex, 0);
  1612.               break;
  1613.             case CHDELAYOFFSETUP_GADGET:
  1614.               tool->chordelayoffset = (UBYTE) (*functions->ShiftEmbossedProp)(window,  CHDELAYOFFSET_GADGET,  1,  0);
  1615.               sprintf(tool->storage5, "F043104C020125%02lxF7",tool->chordelayoffset);
  1616.               tool->chordelayoffsetsysex = tool->storage5;
  1617.               time = functions->timenow;
  1618.               trans_hx(tool,  time,  tool->chordelayoffsetsysex, 0);
  1619.               break;
  1620.             case CHEQLOWFREQ_GADGET:
  1621.               tool->choreqlowfreq = (UBYTE) (*functions->DragEmbossedProp)(window,  CHEQLOWFREQ_GADGET);
  1622.               sprintf(tool->storage6, "F043104C020127%02lxF7",(tool->choreqlowfreq)+8);
  1623.               tool->choreqlowfreqsysex = tool->storage6;
  1624.               time = functions->timenow;
  1625.               trans_hx(tool,  time,  tool->choreqlowfreqsysex, 0);
  1626.               break;
  1627.             case CHEQLOWFREQDOWN_GADGET:
  1628.               tool->choreqlowfreq = (UBYTE) (*functions->ShiftEmbossedProp)(window,  CHEQLOWFREQ_GADGET,  -1,  0);
  1629.               sprintf(tool->storage6, "F043104C020127%02lxF7",(tool->choreqlowfreq)+8);
  1630.               tool->choreqlowfreqsysex = tool->storage6;
  1631.               time = functions->timenow;
  1632.               trans_hx(tool,  time,  tool->choreqlowfreqsysex, 0);
  1633.               break;
  1634.             case CHEQLOWFREQUP_GADGET:
  1635.               tool->choreqlowfreq = (UBYTE) (*functions->ShiftEmbossedProp)(window,  CHEQLOWFREQ_GADGET,  1,  0);
  1636.               sprintf(tool->storage6, "F043104C020127%02lxF7",(tool->choreqlowfreq)+8);
  1637.               tool->choreqlowfreqsysex = tool->storage6;
  1638.               time = functions->timenow;
  1639.               trans_hx(tool,  time,  tool->choreqlowfreqsysex, 0);
  1640.               break;
  1641.             case CHEQLOWGAIN_GADGET:
  1642.               tool->choreqlowgain = (UBYTE) (*functions->DragEmbossedProp)(window,  CHEQLOWGAIN_GADGET);
  1643.               sprintf(tool->storage7, "F043104C020128%02lxF7",(tool->choreqlowgain)+52);
  1644.               tool->choreqlowgainsysex = tool->storage7;
  1645.               time = functions->timenow;
  1646.               trans_hx(tool,  time,  tool->choreqlowgainsysex, 0);
  1647.               break;
  1648.             case CHEQLOWGAINDOWN_GADGET:
  1649.               tool->choreqlowgain = (UBYTE) (*functions->ShiftEmbossedProp)(window,  CHEQLOWGAIN_GADGET,  -1,  0);
  1650.               sprintf(tool->storage7, "F043104C020128%02lxF7",(tool->choreqlowgain)+52);
  1651.               tool->choreqlowgainsysex = tool->storage7;
  1652.               time = functions->timenow;
  1653.               trans_hx(tool,  time,  tool->choreqlowgainsysex, 0);
  1654.               break;
  1655.             case CHEQLOWGAINUP_GADGET:
  1656.               tool->choreqlowgain = (UBYTE) (*functions->ShiftEmbossedProp)(window,  CHEQLOWGAIN_GADGET,  1,  0);
  1657.               sprintf(tool->storage7, "F043104C020128%02lxF7",(tool->choreqlowgain)+52);
  1658.               tool->choreqlowgainsysex = tool->storage7;
  1659.               time = functions->timenow;
  1660.               trans_hx(tool,  time,  tool->choreqlowgainsysex, 0);
  1661.               break;
  1662.             case CHEQHIGHFREQ_GADGET:
  1663.               tool->choreqhighfreq = (UBYTE) (*functions->DragEmbossedProp)(window,  CHEQHIGHFREQ_GADGET);
  1664.               sprintf(tool->storage8, "F043104C020129%02lxF7",(tool->choreqhighfreq)+28);
  1665.               tool->choreqhighfreqsysex = tool->storage8;
  1666.               time = functions->timenow;
  1667.               trans_hx(tool,  time,  tool->choreqhighfreqsysex, 0);
  1668.               break;
  1669.             case CHEQHIGHFREQDOWN_GADGET:
  1670.               tool->choreqhighfreq = (UBYTE) (*functions->ShiftEmbossedProp)(window,  CHEQHIGHFREQ_GADGET,  -1,  0);
  1671.               sprintf(tool->storage8, "F043104C020129%02lxF7",(tool->choreqhighfreq)+28);
  1672.               tool->choreqhighfreqsysex = tool->storage8;
  1673.               time = functions->timenow;
  1674.               trans_hx(tool,  time,  tool->choreqhighfreqsysex, 0);
  1675.               break;
  1676.             case CHEQHIGHFREQUP_GADGET:
  1677.               tool->choreqhighfreq = (UBYTE) (*functions->ShiftEmbossedProp)(window,  CHEQHIGHFREQ_GADGET,  1,  0);
  1678.               sprintf(tool->storage8, "F043104C020129%02lxF7",(tool->choreqhighfreq)+28);
  1679.               tool->choreqhighfreqsysex = tool->storage8;
  1680.               time = functions->timenow;
  1681.               trans_hx(tool,  time,  tool->choreqhighfreqsysex, 0);
  1682.               break;
  1683.             case CHEQHIGHGAIN_GADGET:
  1684.               tool->choreqhighgain = (UBYTE) (*functions->DragEmbossedProp)(window,  CHEQHIGHGAIN_GADGET);
  1685.               sprintf(tool->storage9, "F043104C02012a%02lxF7",(tool->choreqhighgain)+52);
  1686.               tool->choreqhighgainsysex = tool->storage9;
  1687.               time = functions->timenow;
  1688.               trans_hx(tool,  time,  tool->choreqhighgainsysex, 0);
  1689.               break;
  1690.             case CHEQHIGHGAINDOWN_GADGET:
  1691.               tool->choreqhighgain = (UBYTE) (*functions->ShiftEmbossedProp)(window,  CHEQHIGHGAIN_GADGET,  -1,  0);
  1692.               sprintf(tool->storage9, "F043104C02012a%02lxF7",(tool->choreqhighgain)+52);
  1693.               tool->choreqhighgainsysex = tool->storage9;
  1694.               time = functions->timenow;
  1695.               trans_hx(tool,  time,  tool->choreqhighgainsysex, 0);
  1696.               break;
  1697.             case CHEQHIGHGAINUP_GADGET:
  1698.               tool->choreqhighgain = (UBYTE) (*functions->ShiftEmbossedProp)(window,  CHEQHIGHGAIN_GADGET,  1,  0);
  1699.               sprintf(tool->storage9, "F043104C02012a%02lxF7",(tool->choreqhighgain)+52);
  1700.               tool->choreqhighgainsysex = tool->storage9;
  1701.               time = functions->timenow;
  1702.               trans_hx(tool,  time,  tool->choreqhighgainsysex, 0);
  1703.               break;
  1704.             case CHDRYWET_GADGET:
  1705.               tool->chordrywet = (UBYTE) (*functions->DragEmbossedProp)(window,  CHDRYWET_GADGET);
  1706.               sprintf(tool->storage10, "F043104C02012b%02lxF7",tool->chordrywet);
  1707.               tool->chordrywetsysex = tool->storage10;
  1708.               time = functions->timenow;
  1709.               trans_hx(tool,  time,  tool->chordrywetsysex, 0);
  1710.               break;
  1711.             case CHDRYWETDOWN_GADGET:
  1712.               tool->chordrywet = (UBYTE) (*functions->ShiftEmbossedProp)(window,  CHDRYWET_GADGET,  -1,  0);
  1713.               sprintf(tool->storage10, "F043104C02012b%02lxF7",tool->chordrywet);
  1714.               tool->chordrywetsysex = tool->storage10;
  1715.               time = functions->timenow;
  1716.               trans_hx(tool,  time,  tool->chordrywetsysex, 0);
  1717.               break;
  1718.             case CHDRYWETUP_GADGET:
  1719.               tool->chordrywet = (UBYTE) (*functions->ShiftEmbossedProp)(window,  CHDRYWET_GADGET,  1,  0);
  1720.               sprintf(tool->storage10, "F043104C02012b%02lxF7",tool->chordrywet);
  1721.               tool->chordrywetsysex = tool->storage10;
  1722.               time = functions->timenow;
  1723.               trans_hx(tool,  time,  tool->chordrywetsysex, 0);
  1724.               break;
  1725.             case CHRETURN_GADGET:
  1726.               tool->chorreturn = (UBYTE) (*functions->DragEmbossedProp)(window,  CHRETURN_GADGET);
  1727.               sprintf(tool->storage11, "F043104C02012c%02lxF7",tool->chorreturn);
  1728.               tool->chorreturnsysex = tool->storage11;
  1729.               time = functions->timenow;
  1730.               trans_hx(tool,  time,  tool->chorreturnsysex, 0);
  1731.               break;
  1732.             case CHRETURNDOWN_GADGET:
  1733.               tool->chorreturn = (UBYTE) (*functions->ShiftEmbossedProp)(window,  CHRETURN_GADGET,  -1,  0);
  1734.               sprintf(tool->storage11, "F043104C02012c%02lxF7",tool->chorreturn);
  1735.               tool->chorreturnsysex = tool->storage11;
  1736.               time = functions->timenow;
  1737.               trans_hx(tool,  time,  tool->chorreturnsysex, 0);
  1738.               break;
  1739.             case CHRETURNUP_GADGET:
  1740.               tool->chorreturn = (UBYTE) (*functions->ShiftEmbossedProp)(window,  CHRETURN_GADGET,  1,  0);
  1741.               sprintf(tool->storage11, "F043104C02012c%02lxF7",tool->chorreturn);
  1742.               tool->chorreturnsysex = tool->storage11;
  1743.               time = functions->timenow;
  1744.               trans_hx(tool,  time,  tool->chorreturnsysex, 0);
  1745.               break;
  1746.             case CHPAN_GADGET:
  1747.               tool->chorpan = (UBYTE) (*functions->DragEmbossedProp)(window,  CHPAN_GADGET);
  1748.               sprintf(tool->storage12, "F043104C02012d%02lxF7",tool->chorpan);
  1749.               tool->chorpansysex = tool->storage12;
  1750.               time = functions->timenow;
  1751.               trans_hx(tool,  time,  tool->chorpansysex, 0);
  1752.               break;
  1753.             case CHPANDOWN_GADGET:
  1754.               tool->chorpan = (UBYTE) (*functions->ShiftEmbossedProp)(window,  CHPAN_GADGET,  -1,  0);
  1755.               sprintf(tool->storage12, "F043104C02012d%02lxF7",tool->chorpan);
  1756.               tool->chorpansysex = tool->storage12;
  1757.               time = functions->timenow;
  1758.               trans_hx(tool,  time,  tool->chorpansysex, 0);
  1759.               break;
  1760.             case CHPANUP_GADGET:
  1761.               tool->chorpan = (UBYTE) (*functions->ShiftEmbossedProp)(window,  CHPAN_GADGET,  1,  0);
  1762.               sprintf(tool->storage12, "F043104C02012d%02lxF7",tool->chorpan);
  1763.               tool->chorpansysex = tool->storage12;
  1764.               time = functions->timenow;
  1765.               trans_hx(tool,  time,  tool->chorpansysex, 0);
  1766.               break;
  1767.             case CHSNDCHORREV_GADGET:
  1768.               tool->chorsndchorrev = (UBYTE) (*functions->DragEmbossedProp)(window,  CHSNDCHORREV_GADGET);
  1769.               sprintf(tool->storage13, "F043104C02012e%02lxF7",tool->chorsndchorrev);
  1770.               tool->chorsndchorrevsysex = tool->storage13;
  1771.               time = functions->timenow;
  1772.               trans_hx(tool,  time,  tool->chorsndchorrevsysex, 0);
  1773.               break;
  1774.             case CHSNDCHORREVDOWN_GADGET:
  1775.               tool->chorsndchorrev = (UBYTE) (*functions->ShiftEmbossedProp)(window,  CHSNDCHORREV_GADGET,  -1,  0);
  1776.               sprintf(tool->storage13, "F043104C02012e%02lxF7",tool->chorsndchorrev);
  1777.               tool->chorsndchorrevsysex = tool->storage13;
  1778.               time = functions->timenow;
  1779.               trans_hx(tool,  time,  tool->chorsndchorrevsysex, 0);
  1780.               break;
  1781.             case CHSNDCHORREVUP_GADGET:
  1782.               tool->chorsndchorrev = (UBYTE) (*functions->ShiftEmbossedProp)(window,  CHSNDCHORREV_GADGET,  1,  0);
  1783.               sprintf(tool->storage13, "F043104C02012e%02lxF7",tool->chorsndchorrev);
  1784.               tool->chorsndchorrevsysex = tool->storage13;
  1785.               time = functions->timenow;
  1786.               trans_hx(tool,  time,  tool->chorsndchorrevsysex, 0);
  1787.               break;
  1788.             case CHINPUT_GADGET:
  1789.               tool->chorinput = (UBYTE) (*functions->DragEmbossedProp)(window,  CHINPUT_GADGET);
  1790.               sprintf(tool->storage14, "F043104C020134%02lxF7",tool->chorinput);
  1791.               tool->chorinputsysex = tool->storage14;
  1792.               time = functions->timenow;
  1793.               trans_hx(tool,  time,  tool->chorinputsysex, 0);
  1794.               break;
  1795.             case CHINPUTDOWN_GADGET:
  1796.               tool->chorinput = (UBYTE) (*functions->ShiftEmbossedProp)(window,  CHINPUT_GADGET,  -1,  0);
  1797.               sprintf(tool->storage14, "F043104C020134%02lxF7",tool->chorinput);
  1798.               tool->chorinputsysex = tool->storage14;
  1799.               time = functions->timenow;
  1800.               trans_hx(tool,  time,  tool->chorinputsysex, 0);
  1801.               break;
  1802.             case CHINPUTUP_GADGET:
  1803.               tool->chorinput = (UBYTE) (*functions->ShiftEmbossedProp)(window,  CHINPUT_GADGET,  1,  0);
  1804.               sprintf(tool->storage14, "F043104C020134%02lxF7",tool->chorinput);
  1805.               tool->chorinputsysex = tool->storage14;
  1806.               time = functions->timenow;
  1807.               trans_hx(tool,  time,  tool->chorinputsysex, 0);
  1808.               break;
  1809.             case CHLFOPHASEDIFF_GADGET:
  1810.               tool->chorlfophasediff = (UBYTE) (*functions->DragEmbossedProp)(window,  CHLFOPHASEDIFF_GADGET);
  1811.               sprintf(tool->storage15, "F043104C020133%02lxF7",(tool->chorlfophasediff)+4);
  1812.               tool->chorlfophasediffsysex = tool->storage15;
  1813.               time = functions->timenow;
  1814.               trans_hx(tool,  time,  tool->chorlfophasediffsysex, 0);
  1815.               break;
  1816.             case CHLFOPHASEDIFFDOWN_GADGET:
  1817.               tool->chorlfophasediff = (UBYTE) (*functions->ShiftEmbossedProp)(window,  CHLFOPHASEDIFF_GADGET,  -1,  0);
  1818.               sprintf(tool->storage15, "F043104C020133%02lxF7",(tool->chorlfophasediff)+4);
  1819.               tool->chorlfophasediffsysex = tool->storage15;
  1820.               time = functions->timenow;
  1821.               trans_hx(tool,  time,  tool->chorlfophasediffsysex, 0);
  1822.               break;
  1823.             case CHLFOPHASEDIFFUP_GADGET:
  1824.               tool->chorlfophasediff = (UBYTE) (*functions->ShiftEmbossedProp)(window,  CHLFOPHASEDIFF_GADGET,  1,  0);
  1825.               sprintf(tool->storage15, "F043104C020133%02lxF7",(tool->chorlfophasediff)+4);
  1826.               tool->chorlfophasediffsysex = tool->storage15;
  1827.               time = functions->timenow;
  1828.               trans_hx(tool,  time,  tool->chorlfophasediffsysex, 0);
  1829.               break;
  1830.             case WRITE_GADGET:
  1831.                if ((*functions->areyousure)("write to track ? Play-pointer on right place?"))
  1832.                    {
  1833.                    if (!functions->running)
  1834.                        {
  1835.                        time = functions->starttime;
  1836.                        if (tool->chortypesysex != NULL) trans_hx(tool, time, tool->chortypesysex , 1);
  1837.                        if (tool->chorlfofrequencesysex != NULL) trans_hx(tool, time+1,  tool->chorlfofrequencesysex , 1);
  1838.                        if (tool->chorlfopmdepthsysex != NULL) trans_hx(tool, time+2,    tool->chorlfopmdepthsysex , 1);
  1839.                        if (tool->chorfeedbacklevelsysex != NULL) trans_hx(tool, time+3,  tool->chorfeedbacklevelsysex , 1);
  1840.                        if (tool->chordelayoffsetsysex != NULL) trans_hx(tool, time+4,   tool->chordelayoffsetsysex , 1);
  1841.                        if (tool->choreqlowfreqsysex != NULL) trans_hx(tool, time+5,  tool->choreqlowfreqsysex , 1);
  1842.                        if (tool->choreqlowgainsysex != NULL) trans_hx(tool, time+6,  tool->choreqlowgainsysex , 1);
  1843.                        if (tool->choreqhighfreqsysex != NULL) trans_hx(tool, time+7,    tool->choreqhighfreqsysex , 1);
  1844.                        if (tool->choreqhighgainsysex != NULL) trans_hx(tool, time+9,    tool->choreqhighgainsysex , 1);
  1845.                        if (tool->chordrywetsysex != NULL) trans_hx(tool, time+10,   tool->chordrywetsysex , 1);
  1846.                        if (tool->chorreturnsysex != NULL) trans_hx(tool, time+11,   tool->chorreturnsysex , 1);
  1847.                        if (tool->chorpansysex != NULL) trans_hx(tool, time+12,  tool->chorpansysex , 1);
  1848.                        if (tool->chorsndchorrevsysex != NULL) trans_hx(tool, time+13,   tool->chorsndchorrevsysex , 1);
  1849.                        if (tool->chorinputsysex != NULL) trans_hx(tool, time+14,  tool->chorinputsysex , 1);
  1850.                        if (tool->chorlfophasediffsysex != NULL) trans_hx(tool, time+15,  tool->chorlfophasediffsysex , 1);
  1851.                        }
  1852.                    break;
  1853.                    }
  1854.  
  1855.               else {
  1856.                    break;
  1857.                    }
  1858.             }
  1859.         send_note(tool,  functions->timenow,  60);
  1860.         }
  1861.       else if (class == GADGETUP)
  1862.         {
  1863.           // Nothing.
  1864.         }
  1865.     }
  1866.   tool->tool.window = 0;
  1867.   tool->tool.left = window->LeftEdge;
  1868.   tool->tool.top = window->TopEdge;
  1869.   tool->tool.width = window->Width;
  1870.   tool->tool.height = window->Height;
  1871.   tool->tool.touched = TOUCH_INIT | TOUCH_EDIT;
  1872. /*
  1873. for (i = CHTYPE_GADGET; i <= CHLFOPHASEDIFF_GADGET; i += 3)
  1874.     {
  1875.         (*functions->FatEmbossedPropOff)(window, i,  i + 1, i + 2);
  1876.     }
  1877. */
  1878. (*functions->FatEmbossedPropOff)(window, CHTYPE_GADGET,  CHTYPEDOWN_GADGET, CHTYPEUP_GADGET);
  1879. (*functions->FatEmbossedPropOff)(window, CHLFOFREQ_GADGET,  CHLFOFREQDOWN_GADGET, CHLFOFREQUP_GADGET);
  1880. (*functions->FatEmbossedPropOff)(window, CHLFOPMDEPTH_GADGET,  CHLFOPMDEPTHDOWN_GADGET, CHLFOPMDEPTHUP_GADGET);
  1881. (*functions->FatEmbossedPropOff)(window, CHFEEDBLEVEL_GADGET,  CHFEEDBLEVELDOWN_GADGET, CHFEEDBLEVELUP_GADGET);
  1882. (*functions->FatEmbossedPropOff)(window, CHDELAYOFFSET_GADGET,  CHDELAYOFFSETDOWN_GADGET, CHDELAYOFFSETUP_GADGET);
  1883. (*functions->FatEmbossedPropOff)(window, CHEQLOWFREQ_GADGET,  CHEQLOWFREQDOWN_GADGET, CHEQLOWFREQUP_GADGET);
  1884. (*functions->FatEmbossedPropOff)(window, CHEQLOWGAIN_GADGET,  CHEQLOWGAINDOWN_GADGET, CHEQLOWGAINUP_GADGET);
  1885. (*functions->FatEmbossedPropOff)(window, CHEQHIGHFREQ_GADGET,  CHEQHIGHFREQDOWN_GADGET, CHEQHIGHFREQUP_GADGET);
  1886. (*functions->FatEmbossedPropOff)(window, CHEQHIGHGAIN_GADGET,  CHEQHIGHGAINDOWN_GADGET, CHEQHIGHGAINUP_GADGET);
  1887. (*functions->FatEmbossedPropOff)(window, CHDRYWET_GADGET,  CHDRYWETDOWN_GADGET, CHDRYWETUP_GADGET);
  1888. (*functions->FatEmbossedPropOff)(window, CHRETURN_GADGET,  CHRETURNDOWN_GADGET, CHRETURNUP_GADGET);
  1889. (*functions->FatEmbossedPropOff)(window, CHPAN_GADGET,  CHPANDOWN_GADGET, CHPANUP_GADGET);
  1890. (*functions->FatEmbossedPropOff)(window, CHSNDCHORREV_GADGET,  CHSNDCHORREVDOWN_GADGET, CHSNDCHORREVUP_GADGET);
  1891. (*functions->FatEmbossedPropOff)(window, CHINPUT_GADGET,  CHINPUTDOWN_GADGET, CHINPUTUP_GADGET);
  1892. (*functions->FatEmbossedPropOff)(window, CHLFOPHASEDIFF_GADGET,  CHLFOPHASEDIFFDOWN_GADGET, CHLFOPHASEDIFFUP_GADGET);
  1893.  
  1894.  
  1895.   (*functions->EmbossOff)(window,  WRITE_GADGET);
  1896.  
  1897.   (*functions->EmbossWindowOff)(window);
  1898.   (*functions->FlashyCloseWindow)(window);
  1899.   (*functions->DeleteNewWindow)(newwindow);
  1900. }
  1901.  
  1902. //to leave the tool correct
  1903.  
  1904. void __saveds removetool()
  1905. {
  1906. FreeVec(CHXG);
  1907. }
  1908.  
  1909. //start of the tool
  1910.  
  1911. struct ToolMaster * inittoolmaster()
  1912. {
  1913.   if (!(CHXG=(UWORD *)AllocVec(sizeof (CHXGdata), MEMF_CHIP|MEMF_CLEAR))) return(NULL);
  1914.   CopyMem(&CHXGdata, CHXG,  sizeof (CHXGdata));
  1915.  
  1916.   memset((char *)&master, 0, sizeof(struct ToolMaster));
  1917.   CHXG_image.ImageData = CHXG;
  1918.   master.toolid = CHXG_ID;
  1919.   master.image = &CHXG_image;
  1920.   strcpy(master.name,  CHXG_NAME);
  1921.   master.edittool = edittoolcode;
  1922.   master.processevent = processeventcode;
  1923.   master.tooltype = CHXG_TYPE;
  1924.   master.toolsize = sizeof(struct CHXGTool);
  1925.   master.removetool = removetool;
  1926.   return(&master);
  1927. }
  1928.